简体   繁体   English

Python Pandas:两个数据帧之间数据的条件减法?

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

I'm trying to use conditional subtraction between two dataframes.我正在尝试在两个数据帧之间使用条件减法。

Dataframe df1 has columns name and price.name is not unique.数据框df1具有列名称,并且price.name不是唯一的。

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

Another dataframe has two columns name and paid , Here name is unique另一个数据框有两列namepaid ,这里name是唯一的

>>df2
       name      paid
    0  mark     150
    1  john     10

How can I conditionally subtract both dataframes to get following output如何有条件地减去两个数据帧以获得以下输出

Final Output expected预期最终产出

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

IIUC, you can use: 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
            )
     )

output:输出:

    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