熊猫计算列中的元素并以重复的方式显示

Posted

技术标签:

【中文标题】熊猫计算列中的元素并以重复的方式显示【英文标题】:Pandas count elements in a columns and show in duplicated way 【发布时间】:2018-09-28 01:58:19 【问题描述】:

我想要这样的东西。

A
1
1
2
3
3
4
4
4
4

我想变成这样

A   B
1   2
1   2
2   1
3   2
3   2
4   4
4   4
4   4
4   4

就像您在此处看到的那样,密钥是重复的,但顺序仍与原始密钥相同。

我知道如何在 R 中使用 data.table 来完成这项任务,我只知道如何使用 groupby 来获取 pandas 中的唯一键计数。

有人有想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

你可以用这个:

import pandas as pd

df = pd.DataFrame(
    'A' : [1, 1, 2, 3, 3, 4, 4, 4, 4]
)
df['B'] = df.groupby(['A'])['A'].transform('count')

print(df)

输出:

   A  B
0  1  2
1  1  2
2  2  1
3  3  2
4  3  2
5  4  4
6  4  4
7  4  4
8  4  4

【讨论】:

【参考方案2】:

您可以使用 groupby 并合并:

df = pd.DataFrame('A' : [1, 1, 2, 3, 3, 4, 4, 4, 4])

df = df.merge(df.groupby('A').size().reset_index(), on='A')

这会给你:

   A  0
0  1  2
1  1  2
2  2  1
3  3  2
4  3  2
5  4  4
6  4  4
7  4  4
8  4  4

【讨论】:

不错!从来没见过这样的 @JayFresco 你的方法实际上更快,这只是一个替代方案;)【参考方案3】:

使用pd.factorizenp.bincount的快捷方式

f = df.A.factorize()[0]
df.assign(B=np.bincount(f)[f])

   A  B
0  1  2
1  1  2
2  2  1
3  3  2
4  3  2
5  4  4
6  4  4
7  4  4
8  4  4

说明

pd.factorize 将创建一个整数数组,其中每个整数代表分解数组中的唯一值。这些整数从零开始。

f

array([0, 0, 1, 2, 2, 3, 3, 3, 3])

np.bincount 将使用整数数组中的每个值并计算该整数被看到的次数。如果我们将这些整数视为 bin,那么我们就是在计算每个 bin 被引用的次数。

np.bincount(f)

array([2, 1, 2, 4])

最后,我们使用f 对这些计数进行切片,以将每次引用 bin 时重复的计数返回给我们。

np.bincount(f)[f]

array([2, 2, 1, 2, 2, 4, 4, 4, 4])

【讨论】:

【参考方案4】:

使用mapgroupby size

df['B']=df.A.map(df.groupby('A').size())
df
Out[630]: 
   A  B
0  1  2
1  1  2
2  2  1
3  3  2
4  3  2
5  4  4
6  4  4
7  4  4
8  4  4

【讨论】:

以上是关于熊猫计算列中的元素并以重复的方式显示的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试使用熊猫删除重复的连续元素并保留数据框中的最后一个值

如何根据列表中的项目复制熊猫中的行[重复]

使用熊猫替换列中的值时出错[重复]

熊猫:将列中的列表拆分为多行[重复]

熊猫根据索引标签选择特定列中的值[重复]

组合替换熊猫列中的字符串[重复]