簡體   English   中英

Python Pandas:兩個數據幀之間數據的條件減法?

[英]Python Pandas: Conditional subraction of data between two dataframes?

我正在嘗試在兩個數據幀之間使用條件減法。

數據框df1具有列名稱,並且price.name不是唯一的。

>>df1
        name   price
    0  mark     50
    1  mark     200
    2  john     10
    3  chris    500

另一個數據框有兩列namepaid ,這里name是唯一的

>>df2
       name      paid
    0  mark     150
    1  john     10

如何有條件地減去兩個數據幀以獲得以下輸出

預期最終產出

       name     price  paid
    0  mark     50     50
    1  mark     200    100
    2  john     10     10
    3  chris    500     0

IIUC,您可以使用:

# mapper for paid values
s = df2.set_index('name')['paid']

df1['paid'] = (df1
      .groupby('name')['price']  # for each name
      .apply(lambda g: g.cumsum()  # sum the total owed
                        .clip(upper=s.get(g.name, default=0)) # in the limit of the paid
                        .pipe(lambda s: s.diff().fillna(s))   # compute reverse cumsum
            )
     )

輸出:

    name  price   paid
0   mark     50   50.0
1   mark    200  100.0
2   john     10   10.0
3  chris    500    0.0

暫無
暫無

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

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