2016-10-19 2 views
0

私はデータフレームを持っている:Calcの値count(パンダパイソン)

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

ここでは問題は表示されません。列 'code_1'には_two_個の一意の値があり、' code_2'には_two_個の一意の値があります。したがって、合計で* 4つの列があるはずです。あなたのコードの出力には4列が含まれています –

+0

は私のコードの出力ではありません。 – CyberDreamer

答えて

1

aggfunc lenを使用してピボットテーブルをマージすることを検討してください。

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