我有这个数据框:
import pandas as pd
df = pd.DataFrame({'time': ['20:00', '23:00', '21:00', '21:00', '22:00', '22:00', '20:30'],
'traf': [100, 200, 25, 300, 100, 200, 100],
'num': [5, 3, 5, 6, 41, 34, 10]})
df = df.set_index(['time']).sort_index()
print(df)
traf num
time
20:00 100 5
20:30 100 10
21:00 25 5
21:00 300 6
22:00 100 41
22:00 200 34
23:00 200 3
我正在尝试编写一个函数,以按列df['traf']
的值聚合数据框,然后报告列{{ 1}}满足条件。
这是我正在做的事的示例,但是我不确定这是否合适。另外,由于我正在处理一个非常大的数据帧,因此我不确定这种方式是否足够有效。
df['num']
因此,根据以上结果,我希望我的输出成为num列中的第一个值,在本例中为5.0。
答案 0 :(得分:1)
将transform
与sum
一起使用,然后再次使用groupby
first
s=df.groupby(["time"])['traf'].transform('sum').gt(255)
df[s].groupby('time').num.first()
Out[207]:
time
21:00 5
22:00 41
Name: num, dtype: int64
或
df.loc[s,'num'].iloc[0]
Out[211]: 5