计算熊猫数据帧中一列值的频率,并用频率出现次数标记每一行

时间:2019-09-06 00:08:09

标签: python-3.x pandas dataframe

我想计算熊猫数据框特定列上每个元素的频率,然后用频率出现次数标记每一行。

大多数常见解决方案是如何计算列的每个元素的频率,例如:count the frequency that a value occurs in a dataframe column

我有一个基本代码,例如:

df = pd.DataFrame({ 'A': ['foo', 'bar', 'g2g', 'g2g', 'g2g',  
                                'bar', 'bar', 'foo', 'bar'], 
                   'B': ['a', 'b', 'a', 'b', 'b', 'b', 'a', 'a', 'b'] }) 

print(df)

输出:

     A  B
0  foo  a
1  bar  b
2  g2g  a
3  g2g  b
4  g2g  b
5  bar  b
6  bar  a
7  foo  a
8  bar  b

进一步:df['freq'] = df.groupby('B')['B'].transform('count')输出:

    A  B  freq
0  foo  a     4
1  bar  b     5
2  g2g  a     4
3  g2g  b     5
4  g2g  b     5
5  bar  b     5
6  bar  a     4
7  foo  a     4
8  bar  b     5

在按“ B”列分组后,我想要以下内容:

    A  B  freq_occurance
0  foo  a     1
1  bar  b     1
2  g2g  a     2
3  g2g  b     2
4  g2g  b     3
5  bar  b     4
6  bar  a     3
7  foo  a     4
8  bar  b     5

这意味着,如果列“ B”中的值“ a”具有频率4,则出现“ a”的第一行将被标记为1,第二行具有“ a”的行将被标记为2,依此类推。 。此逻辑适用于“ B”列下的所有唯一值。

2 个答案:

答案 0 :(得分:1)

您可以使用transform并将索引(在reset_index之后)作为值,然后加上一个(新索引从0开始)。

df['freq2'] = df.groupby('B')['B'].transform(lambda x: x.reset_index().index).add(1)

A   B   freq    freq2
0   foo a   4   1
1   bar b   5   1
2   g2g a   4   2
3   g2g b   5   2
4   g2g b   5   3
5   bar b   5   4
6   bar a   4   3
7   foo a   4   4
8   bar b   5   5

答案 1 :(得分:0)

cumcount是您所需要的:

df['freq_occurance'] = df.groupby('B').cumcount() + 1