pandas通过另一个数据帧的索引过滤一个数据帧,然后合并这两个数据帧

2024-05-14 03:12:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,如下所示:

df1 

Index   Fruit
1       Apple
2       Banana
3       Peach

df2 

Index   Taste
1       Tasty
1.5     Rotten
2       Tasty
2.6     Tasty
3       Rotten
3.3     Tasty
4       Tasty

我想用两个数据帧的索引过滤df2,这样df1.index+0.5<;=df2.index,然后取第一行结果。然后将两个数据帧组合在一起。在

生成的数据帧应如下所示:

^{pr2}$

我尝试执行以下操作df2[df2.index>=df1.index + 0.5],但它返回

ValueError: Can only compare identically-labeled Series objects

一。在

有什么帮助吗?在


Tags: 数据ltappleindextastybananadf1df2
2条回答

要从df2获取行,请使用numpybroadcastingargmax。然后,使用df1将结果与pd.concat进行合并。在

r = df2.iloc[(df1.Index.values + 0.5 
       <= df2.Index.values[:, None]).argmax(axis=0)].reset_index(drop=1)

pd.concat([df1, r], 1)

   Index   Fruit  Index   Taste
0      1   Apple    1.5  Rotten
1      2  Banana    2.6   Tasty
2      3   Peach    4.0   Tasty

详细信息

广播提供:

^{pr2}$

argmax为例,你有:

^{3}$

使用^{}作为索引,然后选择^{}和最后一个^{}

df = pd.concat([df1.reset_index(), 
                df2.iloc[df2.index.searchsorted(df1.index + .5)].reset_index()], axis=1)
print (df)
   Index   Fruit  Index   Taste
0      1   Apple    1.5  Rotten
1      2  Banana    2.6   Tasty
2      3   Peach    4.0   Tasty

详细信息:

^{pr2}$

相关问题 更多 >