几列DataFrame(Pandas Python)中的计算值计数

时间:2016-10-19 16:55:59

标签: python pandas dataframe

我有一个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的数量。

1 个答案:

答案 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