重复“group by”pandas数据帧中的值

时间:2016-04-17 12:56:33

标签: python pandas dataframe

我有以下pandas DataFrame:

XEP0363 fileUpload = new XEP0363(connection);
fileUpload.requestSlot("upload.myxmppdomain", "mypic.jpg", 12345, listener)

我希望通过电子邮件和class_price进行分组,对于每行我想要占用class_price的最大值。

我正在使用:

     email   cat  class_price
0   email1@gmail.com  cat1            1
1   email2@gmail.com  cat2            2
2   email3@gmail.com  cat2            4
3   email1@gmail.com  cat2            4
4   email2@gmail.com  cat2            1
5   email3@gmail.com  cat1            3
6   email1@gmail.com  cat1            2
7   email2@gmail.com  cat2            1
8   email3@gmail.com  cat2            4
9   email1@gmail.com  cat2            2
10  email2@gmail.com  cat3            1
11  email3@gmail.com  cat1            1

输出结果为:

test_df2 = test_df.groupby(['email','cat'])['class_price'].max()

但是,如果组合列保留重复值,我怎么能得到一个结果,这样它就可以写成包含所有值的正确表:

email             cat 
email1@gmail.com  cat1    2
                  cat2    4
email2@gmail.com  cat2    2
                  cat3    1
email3@gmail.com  cat1    3
                  cat2    4

注意:示例输出与刚刚编写的示例输入不兼容,以解释这个想法。

2 个答案:

答案 0 :(得分:2)

您可以重置索引,将数据放入列中。

In [1]: print (test_df2.reset_index(name='maxvalue').to_string(index=False))
           email   cat     maxvalue
email1@gmail.com  cat1            2
email1@gmail.com  cat2            4
email2@gmail.com  cat2            2
email2@gmail.com  cat3            1
email3@gmail.com  cat1            3
email3@gmail.com  cat2            4

答案 1 :(得分:2)

您可以像其他答案一样尝试 reset_index,也可以尝试以下 -


test_df2 = test_df.groupby(['email','cat'], as_index=False)['class_price'].max()

相关问题