我正在嘗試僅針對特定行(根據特定型別)基于另一個 Dataframe“qty”列更新 Dataframe 中的“qty”列。
這是我的示例資料框:
df = pd.DataFrame({'op': ['A', 'A', 'A', 'B', 'C'], 'type': ['X', 'Y', 'Z', 'X', 'Z'], 'qty': [3, 1, 8, 0, 4]})
df_xy = pd.DataFrame({'op': ['A', 'B', 'C'], 'qty': [10, 20, 30]})
print(df)
print(df_xy)
op type qty
0 A X 3
1 A Y 1
2 A Z 8
3 B X 0
4 C Z 4
op qty
0 A 10
1 B 20
2 C 30
我嘗試使用 loc 函式選擇相關行并根據我的參考列“op”與其他 Dataframe 進行比較,但沒有成功
# Select df rows where "type" is in "types" and set "qty" according to "qty" from df_xy
types = ['X', 'Y']
df.loc[df['type'].isin(types), 'qty'] = df_xy.loc[df_xy['op'] == df['op'], 'qty']
print(df)
我想要一個像這樣的資料框:
op type qty
0 A X 10
1 A Y 10
2 A Z 8
3 B X 20
4 C Z 4
但是我有一個錯誤,指定我無法比較未以相同方式標記的系列物件
ValueError: Can only compare identically-labeled Series objects
任何幫助深表感謝!提前致謝!
uj5u.com熱心網友回復:
您可以組合loc并merge對齊您的 2 系列:
df.loc[df['type'].isin(types), 'qty'] = df[['op']].merge(df_xy, on='op')['qty']
輸出:
op type qty
0 A X 10
1 A Y 10
2 A Z 8
3 B X 20
4 C Z 4
uj5u.com熱心網友回復:
僅用于Series.map兩側的過濾行以避免處理不匹配的行,此處為Z行:
types = ['X', 'Y']
mask = df['type'].isin(types)
df.loc[mask, 'qty'] = df.loc[mask, 'op'].map(df_xy.set_index('op')['qty'])
print (df)
op type qty
0 A X 10
1 A Y 10
2 A Z 8
3 B X 20
4 C Z 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455753.html
下一篇:我想計算股票的每日收益
