在满足条件的情况下,Pandas计算列内的出现次数

时间:2016-08-16 08:29:41

标签: pandas dataframe count group-by size

我想通过分组来计算。见下面的输入和输出。

输入:

df = pd.DataFrame()

df['col1'] = ['a','a','a','a','b','b','b']
df['col2'] = [4,4,5,5,6,7,8]
df['col3'] = [1,1,1,1,1,1,1]

输出:

   col4
0     2
1     2
2     2
3     2
4     1
5     1
6     1

尝试使用groupby和计数,通过执行:

s = df.groupby(['col1','col2'])['col3'].sum()

我得到的输出是

a     4       2
      5       2
b     6       1
      7       1
      8       1

如何将其添加为主df上的列。

谢谢你!

2 个答案:

答案 0 :(得分:2)

使用transform lensize

df['count'] = df.groupby(['col1','col2'])['col3'].transform(len)
print (df)
  col1  col2  col3  count
0    a     4     1      2
1    a     4     1      2
2    a     5     1      2
3    a     5     1      2
4    b     6     1      1
5    b     7     1      1
6    b     8     1      1
df['count'] = df.groupby(['col1','col2'])['col3'].transform('size')
print (df)
  col1  col2  col3  count
0    a     4     1      2
1    a     4     1      2
2    a     5     1      2
3    a     5     1      2
4    b     6     1      1
5    b     7     1      1
6    b     8     1      1

但不需要列col3,您可以使用col1col2

df = pd.DataFrame()

df['col1'] = ['a','a','a','a','b','b','b']
df['col2'] = [4,4,5,5,6,7,8]

df['count'] = df.groupby(['col1','col2'])['col1'].transform(len)
df['count1'] = df.groupby(['col1','col2'])['col2'].transform(len)
print (df)
  col1  col2 count  count1
0    a     4     2       2
1    a     4     2       2
2    a     5     2       2
3    a     5     2       2
4    b     6     1       1
5    b     7     1       1
6    b     8     1       1

答案 1 :(得分:1)

试试这个,

df['count'] = df.groupby(['col1','col2'])['col3'].transform(sum)
print (df)
  col1  col2  col3  count
0    a     4     1    2
1    a     4     1    2
2    a     5     1    2
3    a     5     1    2
4    b     6     1    1
5    b     7     1    1
6    b     8     1    1