【问题标题】:python: groupby 3 columns according to grouping of first twopython:根据前两个分组分组3列
【发布时间】:2022-01-04 21:37:43
【问题描述】:

鉴于此数据框,

import pandas as pd
d = {'a': ['john', 'mary','john','john','mary','john'], 'b': [1,2,3,1,1,2],
     'c': [0.7, 0.3,0.9,0.4,1.0,0.2],'d': [1,0,0,1,0,1]}
df = pd.DataFrame(data=d)

下面一行打印出df['a']=johndf['a']=mary对应df['b']=1,2,3的次数

print(df.groupby('a')['b'].value_counts())

我现在要做的是打印出df['a']=johndf['a']=marydf['b']=1,2,3 对应df['d']=1=0 的次数。 比如df['a']=johndf['b']=1df['d']总是等于1,当df['a']=johndf['b']=3df['d']=0等时...

以下行打印出全零,我不知道为什么:

print((df['d'])[(df.groupby('a')['b'].value_counts())])

【问题讨论】:

  • df.groupby('a')['b'].value_counts() 返回一个仅包含 2 和 1 的系列。 df['d'][2]df['d'][1] 都是 0。因此都是零。
  • df.groupby(['a','b','c']).size()

标签: python pandas dataframe pandas-groupby


【解决方案1】:

您可以修改代码以容纳groupby 中的多个列:

print(df.groupby(['a', 'b'])['d'].value_counts())
# a     b  d
# john  1  1    2
#       2  1    1
#       3  0    1
# mary  1  0    1
#       2  0    1

【讨论】:

    【解决方案2】:

    只要value_counts

    out = df.value_counts(['a','b','d'])
    a     b  d
    john  1  1    2
          2  1    1
          3  0    1
    mary  1  0    1
          2  0    1
    dtype: int64
    

    【讨论】:

      猜你喜欢
      • 2016-08-11
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多