首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回满足pandas dataframe中条件的dataframe位置的第一个值的位置

返回满足pandas dataframe中条件的dataframe位置的第一个值的位置
EN

Stack Overflow用户
提问于 2019-05-30 06:46:44
回答 1查看 31关注 0票数 0

我有这个数据框架:

代码语言:javascript
复制
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']列的值聚合我的数据帧,然后报告df['num']列中满足条件的第一个值。

这是我正在做的例子,但我不确定这是不是一个正确的艰难之举。此外,由于我正在处理一个非常大的数据帧,我不确定这种方式是否足够有效。

代码语言:javascript
复制
filter = df.groupby(["time"])['traf'].sum() >= 225
df.where(filter, inplace=True)
print(df)

         traf   num
time              
20:00    NaN   NaN
20:30    NaN   NaN
21:00   25.0   5.0
21:00  300.0   6.0
22:00  100.0  41.0
22:00  200.0  34.0
23:00    NaN   NaN

因此,根据上面的结果,我希望我的输出是列num中的第一个值,在本例中不是NaN。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 06:51:29

sum中使用transform,然后使用first再次使用groupby

代码语言:javascript
复制
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

代码语言:javascript
复制
df.loc[s,'num'].iloc[0]
Out[211]: 5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56369475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档