在“分组依据”熊猫数据框中重复值

sta*_*kit 7 python dataframe pandas

我有以下熊猫DataFrame:

     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
Run Code Online (Sandbox Code Playgroud)

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

我正在使用:

test_df2 = test_df.groupby(['email','cat'])['class_price'].max()
Run Code Online (Sandbox Code Playgroud)

输出为:

email             cat 
email1@gmail.com  cat1    2
                  cat2    4
email2@gmail.com  cat2    2
                  cat3    1
email3@gmail.com  cat1    3
                  cat2    4
Run Code Online (Sandbox Code Playgroud)

但是我怎么能得到一个结果,即使是分组的列也保留重复的值,以便可以将所有值写成一个正确的表:

email             cat      maxvalue 
email1@gmail.com    cat2     2
email1@gmail.com    cat1     2
email3@gmail.com    cat3     3
Run Code Online (Sandbox Code Playgroud)

注意:示例输出与仅用于解释该思想的示例输入不兼容。

B. *_* M. 8

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

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
Run Code Online (Sandbox Code Playgroud)


Blu*_*ird 6

您可以尝试reset_index其他答案,也可以尝试下面 -


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

Run Code Online (Sandbox Code Playgroud)