[英]Ratio of value_counts for a binary target variable grouped by another column
[英]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)
你可以用groupby
和transform
来做这个。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.