python pandas数据框上的条件总和被分组在多列上

为了说明我的问题,我有一个示例数据框

df = pd.DataFrame({'key1': [0, 0, 0, 0, 1, 1, 1, 1, 1, 1], 
                    'key2': ['a', 'b', 'b', 'c', 'a', 'a', 'a', 'b', 'b', 'c'], 
                    'key3': [10, 5, 15, 10, 5, 10, 20, 10, 20, 5],  
                    'zdata': [2, 4, 2, 4, 3, 5, 6, 5, 5, 6]})

什么时候

df1 = df.groupby(['key1', 'key2', 'key3'])
df1 = df1.agg({'zdata' : [np.mean]})

产生

                zdata
                mean
key1 key2 key3      
0    a    10       2
     b    5        4 * (new group1)
          15       2 * (new group1)
     c    10       4
1    a    5        3 * (new group2)
          10       5 * (new group2)
          20       6 * (new group2)
     b    10       5
          20       5
     c    5        6

现在,仅在key3具有“ 5”和任何其他数字(即上表中标有*的行)时,我才需要通过将key1和key2分组来查找zdata和key3的平均值

所以理想的结果是

                zdata
                mean
key1 key2 key3      
0    b    10       3
1    a    11.6     4.6

我确定一个lambda函数会到达此示例[Python Pandas Conditional Sums,但此问题在多列中分组

任何帮助将非常感激.

解决方法:

我认为最好将groupbymean用作agg,因为结果是DataFrame在列中没有Multiindex.然后,您可以将filterany和len一起使用,最后groupbymean一起使用:

#instaed of agg use:
df1 = df.groupby(['key1', 'key2', 'key3'], as_index=False)['zdata'].mean()
print df1
   key1 key2  key3  zdata
0     0    a    10      2
1     0    b     5      4
2     0    b    15      2
3     0    c    10      4
4     1    a     5      3
5     1    a    10      5
6     1    a    20      6
7     1    b    10      5
8     1    b    20      5
9     1    c     5      6

#filter rows by conditions
df2 = df1.groupby(['key1', 'key2']).filter(lambda x: (x.key3 == 5).any() & (len(x) > 1))
print df2
   key1 key2  key3  zdata
1     0    b     5      4
2     0    b    15      2
4     1    a     5      3
5     1    a    10      5
6     1    a    20      6

print df2.groupby(['key1', 'key2'], as_index=False).mean()
   key1 key2       key3     zdata
0     0    b  10.000000  3.000000
1     1    a  11.666667  4.666667

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...