繁体   English   中英

当按熊猫中的另一列分组时如何返回 value_counts()

[英]How to return value_counts() when grouped by another column in pandas

我想在基于 col1 的 Pandas groupby 之后将 col2 的 value_counts 中的值返回到原始数据帧。

即我有...

   col1 col2
0  1111    A
1  1111    B
2  1111    B
3  1111    B
4  1111    C
5  2222    A
6  2222    B
7  2222    C
8  2222    C

我想要...

   col1 col2  col3
0  1111    A     1
1  1111    B     3
2  1111    B     3
3  1111    B     3
4  1111    C     1
5  2222    A     1
6  2222    B     1
7  2222    C     2
8  2222    C     2

我可以使用 groupby 获取 col3 的值,然后将 col2 值传递给 value_counts,但我不确定如何将其返回到数据帧中。

例子:

d1 = {'col1': ['1111', '1111', '1111', '1111', '1111', '2222', '2222', '2222', '2222'],
      'col2': ['A', 'B', 'B', 'B', 'C', 'A', 'B', 'C', 'C']}
df1 = pd.DataFrame(data=d1)
d2 = {'col1': ['1111', '1111', '1111', '1111', '1111', '2222', '2222', '2222', '2222'],
      'col2': ['A', 'B', 'B', 'B', 'C', 'A', 'B', 'C', 'C'],
      'col3': [1, 3, 3, 3, 1, 1, 1, 2, 2]}
df2 = pd.DataFrame(data=d2)
print(df1)
print(df2)
counts = df1.groupby('col1').apply(lambda x: x.col2.value_counts()[x.col2])
print(counts)

你可以用groupbytransform来做这个。

df['col3'] = df1.groupby(['col1','col2'])['col2'].transform('count')
print(df)
    col1    col2    col3
0   1111    A   1
1   1111    B   3
2   1111    B   3
3   1111    B   3
4   1111    C   1
5   2222    A   1
6   2222    B   1
7   2222    C   2
8   2222    C   2

我不确定这是否是最佳的,但这是我的做法。 使用.transform('count')阅读.transform('count')的评论让我感觉像.transform('count')

import pandas as pd
d1 = {'col1': ['1111', '1111', '1111', '1111', '1111', '2222', '2222', '2222', '2222'],
      'col2': ['A', 'B', 'B', 'B', 'C', 'A', 'B', 'C', 'C']}
df1 = pd.DataFrame(data=d1)

df_aux = df1.groupby(['col1','col2'])['col1'].count().rename(columns={0:'col3'})
df_aux = df_aux.reset_index()
df_output = df1.merge(df_aux.rename(columns={df_aux.columns[2]:'col3'}),how='left',on=['col1','col2'])
print(df_output)

输出:

   col1 col2  col3
0  1111    A     1
1  1111    B     3
2  1111    B     3
3  1111    B     3
4  1111    C     1
5  2222    A     1
6  2222    B     1
7  2222    C     2
8  2222    C     2

嗨,以下是另一种方法:

只需在您的笔记本中执行:

import pandas as pd

dictionary1={ 'col1':[1111,1111,1111,1111,1111,2222,2222,2222,2222],
              'col2':['A','B','B','B','C','A','B','C','C']
            }
df1=pd.DataFrame(dictionary1)

d=df1.groupby(['col1','col2'])['col2'].count().rename(columns={'col3'})

pd.DataFrame(d,columns=['col3'])

输出

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM