繁体   English   中英

根据一列中的值与另一列中的值对数据集进行分组

[英]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 1col 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM