Groupby中的项目计数

时间:2019-03-11 18:46:31

标签: python pandas duplicates pandas-groupby

这是一个较大数据框的示例。我有一个分组为4的数据框

gr = df.groupby(np.arange(len(df.index))//4)

我正在尝试将每组4中的唯一字母的字母数放入新的名为Count的列中。

我尝试了几件事,但仍然无法将其整理成最终形式。任何帮助将不胜感激。我已经尝试过df.duplicate,value_count,但是 它的形式不会按要求出现。有任何想法吗?也许是一个value_count,然后将字母映射到正确的位置?

我也想避免for循环。我正在寻找更多的熊猫数据框技巧,或者可能有用的lambda x函数。

import pandas as pd
import numpy as np

data= [['X',1000],
['X',60],
['X',60],
['Y',40],
['X',60],
['Z',30],
['X',60],
['Z',30],
['X',60],
['Z',30],
['Y',40],
['S',25]]

df = pd.DataFrame(data,columns=['Letter','Cost'])

#groupby4s
gr = df.groupby(np.arange(len(df.index))//4)

我正在寻找的表格:

    Letter  Cost  Count 
0        X    60      3
1        X    60      3
2        X    60      3
3        Y    40      1
4        X    60      2
5        Z    30      2
6        X    60      2
7        Z    30      2
8        X    60      1
9        Z    30      1
10       Y    40      1
11       S    25      1

1 个答案:

答案 0 :(得分:1)

尝试将groupbytransformcount结合使用:

df['Count'] = df.groupby([np.arange(len(df.index))//4, df['Letter']])['Letter']\
                .transform('count')

输出:

   Letter  Cost  Count
0       X  1000      3
1       X    60      3
2       X    60      3
3       Y    40      1
4       X    60      2
5       Z    30      2
6       X    60      2
7       Z    30      2
8       X    60      1
9       Z    30      1
10      Y    40      1
11      S    25      1