【问题标题】:Grouping Multiple Columns into a Few Columns-Pandas Dataframes将多列分组为几列-Pandas 数据框
【发布时间】:2021-07-13 21:45:42
【问题描述】:

我有一个包含虚拟变量的数据框;但是,我想将多列(100+)分组为几列。我们欢迎所有的建议。谢谢! 例如:

   A_1 | A_2 | A_3| B_1|  B_2|  B_3|  C_1|  C_2|  C_2|
0 |   0|    1|   0|   0|    0|    0|    0|    0|    0|
1 |   0|    0|   0|   0|    0|    1|    0|    1|    0|
2 |   0|    0|   0|   0|    0|    0|    1|    0|    0|
3 |   0|    0|   0|   0|    1|    0|    0|    0|    0|
4 |   1|    0|   0|   0|    0|    0|    0|    0|    0|
5 |   0|    0|   1|   0|    0|    0|    0|    1|    0|
6 |   0|    0|   0|   1|    0|    0|    0|    0|    0|

期望的输出:

   A|  B|  C|  
0| 1|  0|  0|      
1| 0|  1|  1|       
2| 0|  0|  1|       
3| 0|  1|  0|       
4| 1|  0|  0|       
5| 1|  0|  1|      
6| 0|  1|  0|     

我已尝试使用此代码;但是,我不断遇到错误消息,提示缺少列名。

categories = {'A':'A','B': 'B','C': 'C'}
    def correct_categories(cols1):
        return [categories[cat] for col1 in cols1 for cat in categories.keys() if col1.startswith(cat)]
        
rslt = df3.groupby(correct_categories(df3.columns),axis=1).sum()
print(rslt)

错误信息:KeyError: 'A'

【问题讨论】:

    标签: python pandas dataframe group-by pandas-groupby


    【解决方案1】:

    尝试使用.str.split().str.extract 提取第一部分,然后在axis=1 上提取groupby

    # also groupby on
    # df.columns.str.extract('^([^_]+)', expand=False)
    df.groupby(df.columns.str.split('_').str[0], axis=1).sum()
    

    输出:

       A  B  C
    0  1  0  0
    1  0  1  1
    2  0  0  1
    3  0  1  0
    4  1  0  0
    5  1  0  1
    6  0  1  0
    

    【讨论】:

    • 谢谢!如果标题中有多个“_”,我该如何使用“.str.extract”?例如,“A_AA_1”?
    猜你喜欢
    • 2017-08-29
    • 2016-10-13
    • 1970-01-01
    • 2022-08-12
    • 2019-07-25
    • 2018-02-19
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多