如何将特定列值插入到 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()
我有一个输入数据框如下: 输入 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()