簡體   English   中英

減去具有不同索引的 pandas 數據幀

[英]Substract pandas Dataframes with different indices

我有兩個pandas數據幀,我想減去它們。 基本 dataframe 被subtrahend比其他 dataframe minuend具有更多的索引和列。

它們定義如下:

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 minuend - subtrahend subtrahend 或minuend.sub(subtrahend_df)不能開箱即用,因此實現這一目標的最佳方法是什么

我想出的一個解決方案是:

minuend.loc[subtrahend.index, subtrahend.columns] -= subtrahend

但我不確定這是否是解決它的最pythonic和最有效的方法。

你怎么看?

使用df.subtractdf.fillna

In [1396]: minuend.subtract(subtrahend).fillna(minuend).astype(int)
Out[1396]: 
           angles  degrees
circle         -1      360
rectangle       4      360
triangle        2      180

一種使用pandas.DataFrame.update方法:

minuend.update(minuend.sub(subtrahend))

Output:

           angles  degrees
circle       -1.0      360
triangle      2.0      180
rectangle     4.0      360

DataFrame.sub中使用fill_value=0參數:

df = minuend.sub(subtrahend, fill_value=0).astype(int)
print (df)
           angles  degrees
circle         -1      360
rectangle       4      360
triangle        2      180

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM