我有兩個資料框,如下所示。如何通過將 10 減 3 和 55 減 2 來替換 Bank1 資料?
import pandas as pd
data = [['Bank1', 10, 55], ['Bank2', 15,65], ['Bank3', 14,54]]
df1 = pd.DataFrame(data, columns = ['BankName', 'Value1','Value2'])

df2 = pd.DataFrame([[3, 2]], columns = ['Value1','Value2'])

所需輸出(僅替換 Bank1 中的值):
| 銀行名 | 值1 | 值2 |
|---|---|---|
| 銀行1 | 7 | 53 |
| 銀行2 | 15 | 65 |
| 銀行3 | 14 | 54 |
uj5u.com熱心網友回復:
嘗試,使用sub combine_first
df1.sub(df2).combine_first(df1)
BankName Value1 Value2
0 Bank1 7.0 53.0
1 Bank2 15.0 65.0
2 Bank3 14.0 54.0
uj5u.com熱心網友回復:
第一方案是建立index在df22通過Bankname由對齊df1了正確的行subracting:
df.set_index('BankName').sub(df2.set_index([['Bank1']]), fill_value=0)
df.set_index('BankName').sub(df2.set_index([['Bank2']]), fill_value=0)
您需要創建新列df2with BankName,在兩個s中都轉換BankName為,因此可能減去此行:indexDataFrame
df22 = df2.assign(BankName = 'Bank1').set_index('BankName')
df = df1.set_index('BankName').sub(df22, fill_value=0).reset_index()
print (df)
BankName Value1 Value2
0 Bank1 7.0 53.0
1 Bank2 15.0 65.0
2 Bank3 14.0 54.0
減去Bank2:
df22 = df2.assign(BankName = 'Bank2').set_index('BankName')
df = df1.set_index('BankName').sub(df22, fill_value=0).reset_index()
print (df)
BankName Value1 Value2
0 Bank1 10.0 55.0
1 Bank2 12.0 63.0
2 Bank3 14.0 54.0
過濾器的另一種解決方案BankName:
m = df1['BankName']=='Bank1'
df1.loc[m, df2.columns] = df1.loc[m, df2.columns].sub(df2.iloc[0])
print (df1)
BankName Value1 Value2
0 Bank1 7 53
1 Bank2 15 65
2 Bank3 14 54
m = df1['BankName']=='Bank2'
df1.loc[m, df2.columns] = df1.loc[m, df2.columns].sub(df2.iloc[0])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312989.html
上一篇:使用分類器列過濾熊貓中的資料框
