我有一个dataFrame:
id code_1 code_2
0 11 1451 ffx
1 15 2233 ffx
2 24 1451 mmg
3 15 1451 ffx
我需要为唯一ID获取每个代码值的编号(对于所有code_1值和所有code_2值)。例如:
id 1451 2233 ... ffx mmg ...
0 11 1 0 ... 1 0 ...
1 15 1 1 ... 2 0 ...
2 24 1 0 ... 0 1 ...
我执行此代码:
y = data.groupby('id')
.apply(lambda x: x[['code_1', 'code_2']].unstack().value_counts())
.unstack()
但我觉得有些不对劲,因为结果表列的数量少于varians code_1和code_2的数量。
答案 0 :(得分:1)
考虑使用aggfunc len 合并pivot_tables进行计数。
from io import StringIO
import pandas as pd
data = '''
id code_1 code_2
11 1451 ffx
15 2233 ffx
24 1451 mmg
15 1451 ffx'''
df = pd.read_table(StringIO(data), sep="\s+")
df = pd.merge(df[['id', 'code_1']].pivot_table(index='id', columns='code_1', aggfunc=len).\
reset_index(drop=True),
df[['id', 'code_2']].pivot_table(index='id', columns='code_2', aggfunc=len).\
reset_index(drop=True),
left_index=True, right_index=True).fillna(0)
# 1451 2233 ffx mmg
# 0 1.0 0.0 1.0 0.0
# 1 1.0 1.0 2.0 0.0
# 2 1.0 0.0 0.0 1.0