![](/img/trans.png)
[英]Add new column to Pandas DataFrame and fill with first word from another column from same 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.