繁体   English   中英

如何向 Pandas df 添加一个新列,该列从另一个数据帧返回同一组中较大的最小值

[英]How to add a new column to a pandas df that returns the smallest value that is greater in the same group from another dataframe

嗨,我有以下两个熊猫数据框:df1 和 df2。

我想创建一个新的数据框 df3,使其与 df1 相同,但有一个名为“新价格”的额外列。

我希望填充新价格的方式是使用 df2 中大于或等于 df1 中的价格的相同代码返回第一个价格。

以下是数据框:

df1:

Code    Price
X        4.3    
X        2.5    
X        4  
X        1.5    
X        0.24   
X        1  
X        1.3    
Y        3.9    
Y        2.6    

df2:

Code Price
X   0.5
X   1
X   1.5
X   2
X   2.5
X   3
X   3.5
X   4
X   4.5
X   5
X   5.5
Y   0.5
Y   1
Y   1.5
Y   2
Y   2.5
Y   3
Y   3.5
Y   4
Y   4.5
Y   5
Y   5.5

例如,让我们考虑 df1 中的第一个条目

Code Price
X    4.3

因此,新价格列应该查看 df2 中所有带有代码 X 的价格,并返回 df2 中大于或等于 4.3 的最小价格。

在这种情况下,它是 4.5。

对每一行重复此操作以获得

df3:

Code    Price   New Price
X        4.3       4.5
X        2.5       2.5
...
Y         2.6       3

有谁知道如何实现这一点,我试过熊猫合并,但没有用。

你可以做一个交叉连接然后query ,最后groupby().first()

m=(df1.assign(key=1).merge(df2.assign(key=1),on='key',suffixes=('','_y')).drop('key', 1)
                                            .query("(Code==Code_y)&(Price<=Price_y)"))
m.groupby(['Code','Price'],sort=False)['Price_y'].first().reset_index(name='New Price')

  Code  Price  New Price
0    X   4.30        4.5
1    X   2.50        2.5
2    X   4.00        4.0
3    X   1.50        1.5
4    X   0.24        0.5
5    X   1.00        1.0
6    X   1.30        1.5
7    Y   3.90        4.0
8    Y   2.60        3.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM