【问题标题】:grouping in pandas dataframe在熊猫数据框中分组
【发布时间】:2020-12-04 07:10:58
【问题描述】:

我有这个输入数据框:


                Test1               Test2               Test3           Subject
0                 45                 NaN                NaN              Python
1                 50                 NaN                NaN              Python
2                NaN                 30                 NaN              Python
3                NaN                 35                 NaN                OS   
4                NaN                 38                 NaN                OS
5                NaN                 43                 NaN               Java
6                NaN                 32                 NaN                 DS
7                NaN                 NaN                49                  DS
8                NaN                 25                 NaN                 DS 
9                NaN                 34                 NaN                 DS  

预期输出是(数据帧):

Subject         Test1           Test2           Test3
Python          45,50             30    
OS                              35,38               
Java                            43
DS                              32,25,34         49

我试过这段代码:

df.groupby(['subject']).sum().reset_index().assign(subject =lambda x: x['subject'].where(~x['subject'].duplicated(), '')).to_csv('filename.csv', index=False)

它没有给出想要的输出。

【问题讨论】:

    标签: python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    使用自定义函数通过Series.dropna删除缺失值,如有必要转换为整数,然后如果某些数值转换为strings并使用join

    f = lambda x: ','.join(x.dropna().astype(int).astype(str))
    df = df.groupby('Subject', sort=False).agg(f).reset_index()
    print (df)
      Subject  Test1     Test2 Test3
    0  Python  45,50        30      
    1      OS            35,38      
    2    Java               43      
    3      DS         32,25,34    49
    

    如果有许多不同格式的值(例如,某些列是数字而某些字符串),则无需转换为整数的另一个想法:

    f = lambda x: ','.join(x.dropna().astype(str))
    df = df.groupby('Subject', sort=False).agg(f).reset_index()
    print (df)
      Subject      Test1           Test2 Test3
    0  Python  45.0,50.0            30.0      
    1      OS                  35.0,38.0      
    2    Java                       43.0      
    3      DS             32.0,25.0,34.0  49.0
    

    【讨论】:

    • 你能建议我吗,如果我想在单独的新行中打印 40,50 而不是逗号分隔,该怎么办。
    猜你喜欢
    • 2019-10-14
    • 2019-05-03
    • 2022-01-12
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多