Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数应用于groupby之后的已筛选组_Python_Pandas_Filter_Pandas Groupby - Fatal编程技术网

Python 将函数应用于groupby之后的已筛选组

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

我知道有很多关于熊猫的群比过滤问题,但我已经看过了很多,他们没有我需要的

不管怎样,这里是我对数据帧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   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),有几行和>1M
user1-user2
对,所以如果我这样做,我会一遍又一遍地做几个groupby…先过滤,然后是groupby?@YakymPirozhenko我必须做几个这样的计算——这只是一个演示案例。所以我想,比如说,在工作日、周末、工作日等等,得到总和,但总是针对相同的
user1-user2
对。这也是一个相当大的数据集(>10GB),有几行和>1M
user1-user2
对,所以如果我这样做,我会一遍又一遍地做几个GroupBy…谢谢!这是可行的(与Yakym之前的评论相同),但我唯一关心的是,我正在处理一个大型数据集和几个这样的操作。多次使用groupby(我有大约100万个user1-user2对),计算强度有多大?或者这种重复的groupby不是什么大问题吗?如果你想改变你的
groupby
的范围,我看不出一种简单的方法可以多次避免
groupby
。我会测试性能,如果有问题,用基准测试法问一个新问题来证明问题。明白了。谢谢谢谢这是可行的(与Yakym之前的评论相同),但我唯一关心的是,我正在处理一个大型数据集和几个这样的操作。多次使用groupby(我有大约100万个user1-user2对),计算强度有多大?或者这种重复的groupby不是什么大问题吗?如果你想改变你的
groupby
的范围,我看不出一种简单的方法可以多次避免
groupby
。我会测试性能,如果有问题,用基准测试法问一个新问题来证明问题。明白了。谢谢