![](/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.