我有兩個pandas要減去的資料框。基礎資料框minuend比其他資料框有更多的索引和列subtrahend。
它們的定義如下:
minuend = pd.DataFrame(
{"angles": [0, 3, 4], "degrees": [360, 180, 360]},
index=["circle", "triangle", "rectangle"],
)
angles degrees
circle 0 360
triangle 3 180
rectangle 4 360
subtrahend = pd.Series(
[1, 1], index=["circle", "triangle"], name="angles"
).to_frame()
angles
circle 1
triangle 1
預期的結果是:
angles degrees
circle -1 360
triangle 3 180
rectangle 3 360
實作此目的的最佳方法是什么,因為minuend - subtrahend或minuend.sub(subtrahend_df)無法立即使用?
uj5u.com熱心網友回復:
一種使用方式pandas.DataFrame.update:
minuend.update(minuend.sub(subtrahend))
輸出:
angles degrees
circle -1.0 360
triangle 2.0 180
rectangle 4.0 360
uj5u.com熱心網友回復:
使用df.subtract有df.fillna:
In [1396]: minuend.subtract(subtrahend).fillna(minuend).astype(int)
Out[1396]:
angles degrees
circle -1 360
rectangle 4 360
triangle 2 180
uj5u.com熱心網友回復:
使用fill_value=0引數DataFrame.sub:
df = minuend.sub(subtrahend, fill_value=0).astype(int)
print (df)
angles degrees
circle -1 360
rectangle 4 360
triangle 2 180
uj5u.com熱心網友回復:
我想出的一個解決方案是:
minuend.loc[subtrahend.index, subtrahend.columns] -= subtrahend
但我不確定這是否是解決它的最 Pythonic 和最有效的方法。
你怎么認為?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383785.html
上一篇:Pandas:根據條件將值從一個資料幀合并到另一個資料幀
下一篇:在Julia中重命名多列
