使用 Pandas 的条件数据帧操作

conditional dataframe operations using Pandas

我正在对数据帧进行一些计算 A:我想添加一个新列 RESULT,并进行以下计算:

通常有多行具有相同的 key1 值,它们的 key2 可以是 XY。对于具有相同 key1 的每个组: 如果key2 = X,那么RESULT = 0, 否则,RESULT = (C1 | key2= Y)+ (C2| key2= Y)+ (C2| key2= X)。参见 A_MODIFIED

    A =
        key1   key2  C1    C2    
    0   A      X     5     2     
    1   A      Y     3     2     
    2   B      X     6     1     
    3   B      Y     1     3     
    4   C      Y     1     4     
    5   D      X     2     3     
    6   D      Y     1     3     

   A_MODIFIED =
       key1   key2  C1    C2    RESULT
   0   A      X     5     2     0
   1   A      Y     3     2     7
   2   B      X     6     1     0
   3   B      Y     1     3     5
   4   C      Y     1     4     5
   5   D      X     2     3     0
   6   D      Y     1     3     7

这是我所做的:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(A.groupby('key1', sort = False).sum().ix[:, ['C2']].sum(axis=1), columns=['C2_T']).reset_index(level=1)
df2 = A[A['key2'] == 'Y']
df3 = pd.merge(df1, df2, how = 'left').set_index(df1.index)
df3.RESULT = df3.C1+ df3.C2_T

但是现在不知道怎么和原来的合并A

您可以为每个组应用函数 f

函数 f 对列 C2 的所有值求和,因为不依赖于 key2 的值。 C1 的值取决于 key2,因此仅选择 df['key2'] == 'Y'.

的值

最后如果 df['key2'] == 'X' 输出设置为 0

print A
#  key1 key2  C1  C2
#0    A    X   5   2
#1    A    Y   3   2
#2    B    X   6   1
#3    B    Y   1   3
#4    C    Y   1   4
#5    D    X   2   3
#6    D    Y   1   3

def f(df):
    df['RESULT'] = df['C2'].sum() + df['C1'].loc[df['key2'] == 'Y'].sum()
    df['RESULT'].loc[df['key2'] == 'X'] = 0
    return df

df = A.groupby('key1', sort = False).apply(f)
print df
#  key1 key2  C1  C2  RESULT
#0    A    X   5   2       0
#1    A    Y   3   2       7
#2    B    X   6   1       0
#3    B    Y   1   3       5
#4    C    Y   1   4       5
#5    D    X   2   3       0
#6    D    Y   1   3       7