如何根据Pandas中另外两个的值计算一列的计数?

时间:2016-08-10 15:12:55

标签: python pandas

我有一个包含三列的数据集:

2,5,9
12,2,10
5,2,4
9,2,1

现在,显然我可以使用import pandas as pd df = pd.DataFrame({'A': [1,2,3,2,3,3], 'B': [1.0, 2.0, 3.0, 2.0, 3.0, 3.0], 'C': [0.0, 3.5, 1.2, 2.1, 3.1, 0.0]}) 来获取df['A'].value_counts()列中值的计数:

A

但是,我需要的是能够根据df['A'].value_counts() 3 3 2 2 1 1 Name: A, dtype: int64 B之间的关系更改计数的值。

例如:

C

在我的情况下,我希望将df['B'][0] - df['C'][0] 1.0 df['B'][1] - df['C'][1] -1.5 求和为1,将> 0求和为-1,将< 0求和为0,< / p>

因此,出于我的目的,让0B变成这样的:

C

然后能以某种方式将其翻译成:

df = pd.DataFrame({'A':      [1,  2, 3,  2,  3, 3],
                   'counts': [1, -1, 1, -1, -1, 1]})

我正在追求什么。我怎么用熊猫做这个?

2 个答案:

答案 0 :(得分:4)

import pandas as pd
import numpy as np

df['counts'] = np.sign(df.B - df.C)    # use the numpy.sign to create the count column
df.groupby('A')['counts'].sum()        # group the counts by column A and sum the value

#A
#1    1.0
#2   -2.0
#3    1.0
#Name: counts, dtype: float64

答案 1 :(得分:2)

df['counts'] = 0
df.loc[df['B'] - df['C'] > 0, 'counts'] = 1
df.loc[df['B'] - df['C'] < 0, 'counts'] = -1