我有一个如下所示的数据帧:
Time col1 col2 col3
2 a x 10
3 b y 11
1 a x 10
6 c z 12
20 c x 13
23 a y 24
14 c x 13
16 b y 11
...
并且要基于dataframe的其他行向dataframe的每一行添加一列,这是out dataframe:
Time col1 col2 col3 cumVal
2 a x 10 2
3 b y 11 1
1 a x 10 2
6 c z 12 1
20 c x 13 2
23 a y 24 1
14 c x 13 2
16 b y 11 1
...
我试一下:
df['cumVal'] = 0
for index, row in df.iterrows():
min1 = row['Time']-10
max1 = row['Time']+10
ndf = df[(df.col1 == row.col1)&(df.col2 == row.col2)& (df.col3 ==
row.col3)]
df.iloc[index]['cumVal'] = len(ndf.query('@min1 <= Time <= @max1'))
但是它非常慢,任何人都可以更改我的代码以获得更快的速度
您可以在“col1”、“col2”和“col3”上使用} 中,使用^{} 作为^{} 的ufunc来计算该组的“Time”列中的值之间的所有差异,然后在轴=0上的
groupby
,在每个组的^{np.abs
小于10和np.sum
时,您可以计算每个值在+/-10范围内的值它应该提供更好的性能:
相关问题 更多 >
编程相关推荐