【问题标题】:How to use pandas to count the value from multiple column at once如何使用熊猫一次计算多列的值
【发布时间】:2021-11-30 23:20:35
【问题描述】:

我了解到,当我输入 df = pd.read_csv("file.csv") 时,我可以从 csv 文件中获取这些数据,如下所示:

    round        date  first  second  third  fourth  fifth  sixth  bonus
0      959  2021.04.17      1      14     15      24     40     41     35
1      958  2021.04.10      2       9     10      16     35     37      1
2      957  2021.04.03      4      15     24      35     36     40      1
3      956  2021.03.27     10      11     20      21     25     41     40
4      955  2021.03.20      4       9     23      26     29     33      8

我还了解到我可以使用df["column_name"].value_counts() 来计算值写入的频率。

例如df["first"].value_count(),那么它将显示“第一”列的计数值作为结果。喜欢

1     134
2     107
3      94 ...

但我想一次计算多列中的所有值。

如何一次计算多列的值?有人能告诉我使用哪种方法吗?

【问题讨论】:

  • 你能添加预期的输出吗?例如前 5 列?
  • 如果我以上表为例, 1 3 ; 2 1 ; 4 2 ; ... 41 2 ;像这样?

标签: python pandas dataframe csv jupyter-notebook


【解决方案1】:

如果您希望从start 的所有列中的所有当前值的矩阵结束,请按照@jezrael 的建议使用value_counts 并通过列轴对它们求和:

>>> df.iloc[:, 2:].apply(pd.value_counts).fillna(0).astype(int).sum(axis=1)
1     3
2     1
4     2
8     1
9     2
10    2
11    1
14    1
15    2
16    1
20    1
21    1
23    1
24    2
25    1
26    1
29    1
33    1
35    3
36    1
37    1
40    3
41    2
dtype: int64

【讨论】:

    【解决方案2】:

    您可以选择没有前 2 个的所有列,在您的解决方案中使用 DataFrame.melt

    s = df.iloc[:, 2:].melt()['value'].value_counts().sort_index()
    print (s)
    1     3
    2     1
    4     2
    8     1
    9     2
    10    2
    11    1
    14    1
    15    2
    16    1
    20    1
    21    1
    23    1
    24    2
    

    【讨论】:

      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多