Python/Pandas:基于单元格值的计算

bar*_*ons 3 python dataframe pandas

我有这样的数据框:

   A B C D E
0  2 3 4 8 7
1  4 7 5 9 4 
2  3 4 5 7 2
3  8 9 1 3 7
Run Code Online (Sandbox Code Playgroud)

我需要做这样的事情:

if 'value in column A' == 2:
  'value for this row in new column' = 'value from column B' + 'value from column C'
elif 'value in column A' == 4:
   'value for this row in new column' = 'value from column B' + 'value from column D'
elif 'value in column A' == 8:
   'value for this row in new column' = 'value from column B' + 'value from column E'
else:
   'value for this row in new column' = 0
Run Code Online (Sandbox Code Playgroud)

我尝试以几种方式做到这一点,例如:

1.
df['sum'][df['A'] == 2] = df['B'] + df['C']
df['sum'][df['A'] == 4] = df['B'] + df['D']
df['sum'][df['A'] == 8] = df['B'] + df['E']

2.
df.loc[df['A'] == 2, 'sum'] = df['B'] + df['C']
df.loc[df['A'] == 4, 'sum'] = df['B'] + df['D']
df.loc[df['A'] == 8, 'sum'] = df['B'] + df['E']
Run Code Online (Sandbox Code Playgroud)

但结果我有空单元格.

Flo*_*oor 5

另一种简单的方法是使用字典并lookup获得总和即

colons = {2: 'C', 4: 'D', 8: 'E'}
df['sum']= np.nan
df['sum'] = df['B']+ df.lookup(df['A'].index,df['A'].map(colons).fillna('sum'))
Run Code Online (Sandbox Code Playgroud)

输出:

   A  B  C  D  E   sum
0  2  3  4  8  7   7.0
1  4  7  5  9  4  16.0
2  3  4  5  7  2   NaN
3  8  9  1  3  7  16.0

您可以使用0填充nan df.fillna(0)

  • 我正在考虑这个问题.很好的答案 (2认同)