[英]Group a dataset based on values in one column against values in another
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
任何想法如何做到这一点?
使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.