Python 将函数应用于groupby之后的已筛选组
我知道有很多关于熊猫的群比过滤问题,但我已经看过了很多,他们没有我需要的 不管怎样,这里是我对数据帧df的内容:Python 将函数应用于groupby之后的已筛选组,python,pandas,filter,pandas-groupby,Python,Pandas,Filter,Pandas Groupby,我知道有很多关于熊猫的群比过滤问题,但我已经看过了很多,他们没有我需要的 不管怎样,这里是我对数据帧df的内容: user1 user2 date quantity ----------------------------- Alice Bob 2018-05-21 100 Alice Bob 2018-05-19 20 Alice Carol 2018-01-01 1000 Bob Carol 2018-02-01 10
user1 user2 date quantity
-----------------------------
Alice Bob 2018-05-21 100
Alice Bob 2018-05-19 20
Alice Carol 2018-01-01 1000
Bob Carol 2018-02-01 100
我想计算一个函数(比如某个函数func
),只计算工作日的给定user1-user2
对的数量
到目前为止,我得到的是:
df['day'] = df['date'].dt.weekday
df.groupby(['user1','user2']).filter(lambda x: (x.day < 5).any() )
df['day']=df['date'].dt.weekday
df.groupby(['user1','user2']).filter(lambda x:(x.day<5).any())
但我没有得到我所期望的。显然,过滤器所做的是只选择那些至少有一个
day
条目小于5的对。但是,我需要的是,对于一个特定的user1-user2
对,day
列小于5的所有行。一个简单的解决方案是在执行groupby
之前过滤数据帧:
res = df[df['date'].dt.weekday < 5].groupby(...)
res=df[df['date'].dt.weekday<5].groupby(…)
一个简单的解决方案是在执行groupby之前过滤数据帧:
res = df[df['date'].dt.weekday < 5].groupby(...)
res=df[df['date'].dt.weekday<5].groupby(…)
Filter-first-and-groupby?@YakymPirozhenko我必须做几个这样的计算——这只是一个演示案例。所以我想,比如说,在工作日、周末、工作日等等,得到总和,但总是针对相同的user1-user2
对。这也是一个相当大的数据集(>10GB),有几行和>1Muser1-user2
对,所以如果我这样做,我会一遍又一遍地做几个groupby…先过滤,然后是groupby?@YakymPirozhenko我必须做几个这样的计算——这只是一个演示案例。所以我想,比如说,在工作日、周末、工作日等等,得到总和,但总是针对相同的user1-user2
对。这也是一个相当大的数据集(>10GB),有几行和>1Muser1-user2
对,所以如果我这样做,我会一遍又一遍地做几个GroupBy…谢谢!这是可行的(与Yakym之前的评论相同),但我唯一关心的是,我正在处理一个大型数据集和几个这样的操作。多次使用groupby(我有大约100万个user1-user2对),计算强度有多大?或者这种重复的groupby不是什么大问题吗?如果你想改变你的groupby
的范围,我看不出一种简单的方法可以多次避免groupby
。我会测试性能,如果有问题,用基准测试法问一个新问题来证明问题。明白了。谢谢谢谢这是可行的(与Yakym之前的评论相同),但我唯一关心的是,我正在处理一个大型数据集和几个这样的操作。多次使用groupby(我有大约100万个user1-user2对),计算强度有多大?或者这种重复的groupby不是什么大问题吗?如果你想改变你的groupby
的范围,我看不出一种简单的方法可以多次避免groupby
。我会测试性能,如果有问题,用基准测试法问一个新问题来证明问题。明白了。谢谢