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

时间:2018-04-18 00:24:54

标签: python pandas group-by count

我想得到这样的东西。

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

就像你在这里看到的那样,密钥是重复的,并且仍然与原始密钥相同。

我知道如何使用data.table在R中执行此任务,我只知道如何使用groupby获取pandas中的唯一键计数。

有人有想法吗?

谢谢!

4 个答案:

答案 0 :(得分:5)

您可以使用:

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

答案 1 :(得分:3)

您可以使用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

答案 2 :(得分:2)

使用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将使用整数数组中的每个值,并计算该整数被看到的次数。如果我们将这些整数视为二进制数,那么我们计算每个二进制数被引用的次数。

np.bincount(f)

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

最后,我们使用f对这些计数进行切片,以便在每次引用bin时重复计算重复计数。

np.bincount(f)[f]

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

答案 3 :(得分:2)

function promiseOne() { return Promise.resolve(1) } type ThenArg<T> = T extends Promise<infer U> ? U : T extends (...args: any[]) => Promise<infer U> ? U : T type PromiseOneThenArg = ThenArg<typeof promiseOne> // => number map groupby

一起使用
size