如何将特定列值插入到 python 数据框中的另一列特定值

How to insert particular column values to another column particular values in python dataframe

我有一个输入数据框如下: 输入 df:

       PET City    Cost  Expense
0      Dog   MH  1500.0      NaN
1      Dog  BLR  1000.0      NaN
2      Dog   DL  2000.0      NaN
3      Cat   MH     NaN    500.0
4      Cat  BLR     NaN    900.0
5      Cat   DL     NaN   2500.0
6     Bird   MH     NaN      NaN
7     Bird  BLR     NaN      NaN
8     Bird   DL     NaN      NaN
9   Others   MH   100.0      NaN
10  Others  BLR   300.0      NaN
11  Others   DL   700.0      NaN

预期输出:

       PET City    Cost  Expense
0      Dog   MH  1500.0      NaN
1      Dog  BLR  1000.0      NaN
2      Dog   DL  2000.0      NaN
3      Cat   MH     NaN    500.0
4      Cat  BLR     NaN    900.0
5      Cat   DL     NaN   2500.0
6     Bird   MH   500.0      NaN
7     Bird  BLR   900.0      NaN
8     Bird   DL  2500.0      NaN
9   Others   MH   100.0      NaN
10  Others  BLR   300.0      NaN
11  Others   DL   700.0      NaN

输出与输入的区别是:对于有 Bird 的 PET,Cost 将是 Cat 的 Expense 值

我是这样写的,但是报错

df_subset = df.loc[(df['PET'] == 'Cat'), ['Expense']]

df['Cost'] = np.select(df["PET"] == 'Bird', [i for i in df_subset['Expense']], df['Cost'])

你可以试试

df.loc[df['PET'].eq('Bird'), 'Cost'] = df.loc[df['PET'].eq('Bird'), 'City'].map(df.set_index('City').loc[lambda x: x['PET'].eq('Cat'), 'Expense'])
print(df)

       PET City    Cost  Expense
0      Dog   MH  1500.0      NaN
1      Dog  BLR  1000.0      NaN
2      Dog   DL  2000.0      NaN
3      Cat   MH     NaN    500.0
4      Cat  BLR     NaN    900.0
5      Cat   DL     NaN   2500.0
6     Bird   MH   500.0      NaN
7     Bird  BLR   900.0      NaN
8     Bird   DL  2500.0      NaN
9   Others   MH   100.0      NaN
10  Others  BLR   300.0      NaN
11  Others   DL   700.0      NaN

如果您的 City 列有重复项,您可以尝试 df.merge

df.loc[df['PET'].eq('Bird'), 'Cost'] = df.loc[df['PET'].eq('Bird'), ['City']].merge(df.loc[df['PET'].eq('Cat'), ['Expense', 'City']], on='City', how='left')['Expense'].tolist()