2017-11-29 7 views
0
col 1 col 2 
--------------- 
orange  a 
banana  a 
grape  b 
grape  a 
orange  b 
apple  b 
orange  b 
banana  a 

の値に対して1列の値に基づいたデータセットIは、2つの列を持っていると私は彼らがcol 2に対するcol 1の値に基づいてグループ化します。私は出力をしたい:グループ別

grape orange apple banana 
--------------------------------- 
a 1  1  0  2 
b 1  2  1  0 

どのようにこれを行うには?

私にできること pandas
+0

あなたは 'pandas'を使うのですか? – furas

答えて

1

まず私は、文字列からのデータでDataFrameを作成していますが(などpd.read_csv、)ファイルからそれを読むことができます

import pandas as pd 

data = '''orange  a 
banana  a 
grape  b 
grape  a 
orange  b 
apple  b 
orange  b 
banana  a''' 

rows = [row.split() for row in data.split('\n')] 

print(rows) 

df1 = pd.DataFrame(rows, columns=['col 1', 'col 2']) 

print(df1) 

結果

[['orange', 'a'], ['banana', 'a'], ['grape', 'b'], ['grape', 'a'], 
['orange', 'b'], ['apple', 'b'], ['orange', 'b'], ['banana', 'a']] 

    col 1 col 2 
0 orange  a 
1 banana  a 
2 grape  b 
3 grape  a 
4 orange  b 
5 apple  b 
6 orange  b 
7 banana  a 

今私はそれらを数えるために要素をグループ化することができます

df2 = df.groupby(['col 1', 'col 2']).size().reset_index(name='counts') 

print(df2) 

結果

col 1 col 2 counts 
0 apple  b  1 
1 banana  a  2 
2 grape  a  1 
3 grape  b  1 
4 orange  a  1 
5 orange  b  2 

そして私は、予想される結果を得るためにpivotを使用することができます。

df3 = df2.pivot(index='col 2', columns='col 1', values='counts') 

print(df3) 

結果は

col 1 apple banana grape orange 
col 2        
a  NaN  2.0 1.0  1.0 
b  1.0  NaN 1.0  2.0 

空所(NaN)がありますので、私は0

df4 = df3.fillnan(0) 

print(df4) 

結果とそれを埋める:

col 1 apple banana grape orange 
col 2        
a  0.0  2.0 1.0  1.0 
b  1.0  0.0 1.0  2.0