簡體   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