熊猫计算列中的元素并以重复的方式显示
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.factorize
和np.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】:使用map
和groupby
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
【讨论】:
以上是关于熊猫计算列中的元素并以重复的方式显示的主要内容,如果未能解决你的问题,请参考以下文章