1 回答

TA贡献1804条经验 获得超8个赞
您的内部循环贯穿整个 DataFrame,并生成您正在观察的重复计数。
按照@Kenan建议,您可以将内部循环限制为组:
for group in df.groupby('Time'):
for i, row in group[1].iterrows():
seg = checkPoint(row.x_live, row.y_live, row.Angle, row.BallX, row.BallY)
tmp.append(seg)
result.append([tmp.count(i) for i in [1,2,3,4]])
df_result = pd.DataFrame(result, columns = ['1','2','3','4'])
print(df_result)
导致
1 2 3 4
0 0 1 2 1
1 2 1 3 2
或者,您可以使用 groupby-apply 构造来避免显式循环:
def result(g):
tmp = []
for i, row in g.iterrows():
seg = checkPoint(row.x_live, row.y_live, row.Angle, row.BallX, row.BallY)
tmp.append(seg)
return pd.Series([tmp.count(i) for i in [1,2,3,4]], index=[1,2,3,4])
print(df.groupby('Time').apply(result))
这让你:
1 2 3 4
Time
19:50:10.1 0 1 2 1
19:50:10.2 2 0 1 1
添加回答
举报