【问题标题】:Value_counts on multiple columns with groupby使用 groupby 对多列进行 Value_counts
【发布时间】:2018-08-25 03:41:40
【问题描述】:

我需要 Pandas 方面的帮助。

我有以下数据框:

df = pd.DataFrame({'1Country': ['FR', 'FR', 'GER','GER','IT','IT', 'FR','GER','IT'],
               '2City': ['Paris', 'Paris', 'Berlin', 'Berlin', 'Rome', 'Rome','Paris','Berlin','Rome'],
               'F1': ['A', 'B', 'C', 'B', 'B', 'C', 'A', 'B', 'C'],
               'F2': ['B', 'C', 'A', 'A', 'B', 'C', 'A', 'B', 'C'],
               'F3': ['C', 'A', 'B', 'C', 'C', 'C', 'A', 'B', 'C']})

screenshot

我正在尝试在前两列 1Country2City 上执行 groupby 并在列 F1F2 上执行 value_counts。到目前为止,我一次只能在 1 列上执行 groupby 和 value_counts

df.groupby(['1Country','2City'])['F1'].apply(pd.Series.value_counts)

如何在多个列上执行value_counts 并获得一个数据框?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您可以使用agg,类似以下内容:

    df.groupby(['1Country','2City']).agg({i:'value_counts' for i in df.columns[2:]})
    
                   F1   F2   F3
    FR  Paris  A  2.0  1.0  2.0
               B  1.0  1.0  NaN
               C  NaN  1.0  1.0
    GER Berlin A  NaN  2.0  NaN
               B  2.0  1.0  2.0
               C  1.0  NaN  1.0
    IT  Rome   B  1.0  1.0  NaN
               C  2.0  2.0  3.0
    

    【讨论】:

    • 这个答案效果更好,因为我有很多列可以使用并且使用字典可能有点乏味。谢谢!
    【解决方案2】:

    您可以将字典传递给agg,如下所示:

    df.groupby(['1Country', '2City']).agg({'F1': 'value_counts', 'F2': 'value_counts'})
    

    【讨论】:

    • 太棒了!非常感谢!
    猜你喜欢
    • 2021-07-21
    • 2021-12-13
    • 1970-01-01
    • 2020-06-10
    • 2019-01-18
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多