Python-Pandas Tricky列总和

时间:2018-10-25 02:13:07

标签: python pandas dataframe

这是一个棘手的问题,我有一个像这样的数据框,我想创建3个带有条件总和的列,例如

  1. 如果id = A,则A = A1,B和C = B1
  2. 如果id = B,则B = B1且A和C = A1

示例数据:

id A1  B1   A   B   C
A   5   4   5   4   4
B   6   1   6   1   6
A   7   2   7   2   2
B   6   8   8   6   6
C   2   1   2   1   0

我试图提供一个通用的解决方案,所以我不需要很多轴求和。

1 个答案:

答案 0 :(得分:3)

您的情况可以减少为:

  • 如果id == A,则列A =列A1,列C =列B1
  • 如果id == B,则B列= B1列,C列= A1列

因此,它以以下方式转移到了熊猫代码:

df = pd.DataFrame([[5,4],[6,1],[7,2],[6,8],[2,1]], index=['A', 'B', 'A', 'B', 'C'], columns=['A1', 'B1'])


df['A'] = df['A1']
df['B'] = df['B1']
df['C'] = (df.index == 'B')*df['A1'] +(df.index == 'A')*df['B1']
# or faster method from @user3483203 
# df['id'] = df.index
# df['C'] = np.select([df.id.eq('A'), df.id.eq('B')], [df.B1, df.A1], 0)

# >>> df
#    A1  B1  A  B  C
# A   5   4  5  4  4
# B   6   1  6  1  6
# A   7   2  7  2  2
# B   6   8  6  8  6
# C   2   1  2  1  0