col 1 col 2
---------------
orange a
banana a
grape b
grape a
orange b
apple b
orange b
banana a
我有两列,我想根据col 1
对col 2
的值对它们进行分组。我希望输出为:
grape orange apple banana
---------------------------------
a 1 1 0 2
b 1 2 1 0
任何想法如何做到这一点?
答案 0 :(得分:1)
pandas
我可以这样做:
首先,我使用字符串中的数据创建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