首页 > 解决方案 > 在 Pandas Dataframe 中为特定列查找其他值之间的值

问题描述

我试图找到一种方法来合并两个数据框。每个数据框使用两列来创建唯一标识符。在主数据框中,数据被分配给给定的值范围,在类别数据框中,数据被分配给单个值。我想做的是从主数据框中获取类别数据框中每个条目的类型值。

这很难解释,所以这里有一个简单的例子:

master = {'ID1':['a','a','b','b','b','b','b','c','c'],
       'ID2':['d','d','d','d','d','e','e','d','e'],
       'RangeTop':[0,4,0,3,10,0,5,0,0],
       'RangeBot':[4,13,3,10,21,5,11,8,15],
       'Type':['z','y','x','w','v','u','t','s','r']
       }
category = {'ID1':['a','a','b','b','c','c'],
       'ID2':['d','d','d','e','d','e'],
       'Value':[3,8,11,7,6,13]
       }
df = pd.DataFrame(master, columns = ['ID1', 'ID2', 'RangeTop','RangeBot','Type'])
df2 = pd.DataFrame(category, columns = ['ID1', 'ID2', 'Value'])
df['Unique'] = df['ID1']+df['ID2']
df2['Unique'] = df2['ID1']+df2['ID2']
print(df, '\n', df2)

输出如下所示:

master
   ID1 ID2  RangeTop  RangeBot Type Unique
0   a   d         0         4    z     ad
1   a   d         4        13    y     ad
2   b   d         0         3    x     bd
3   b   d         3        10    w     bd
4   b   d        10        21    v     bd
5   b   e         0         5    u     be
6   b   e         5        11    t     be
7   c   d         0         8    s     cd
8   c   e         0        15    r     ce 
 category
   ID1 ID2  Value Unique
0   a   d      3     ad
1   a   d      8     ad
2   b   d     11     bd
3   b   e      7     be
4   c   d      6     cd
5   c   e     13     ce

我组成了 Unique 列,因为我想也许我可以使用 between 方法或 where 方法来查找 RangeTop 和 RangeBot 之间某些唯一标识符的值,但它不起作用。我希望它看起来像:

 category
   ID1 ID2  Value Unique Type
0   a   d      3     ad   z
1   a   d      8     ad   y
2   b   d     11     bd   v
3   b   e      7     be   t
4   c   d      6     cd   s
5   c   e     13     ce   r

标签: pythonpandasdataframe

解决方案


你应该看看合并功能:

merged = df1.merge(df2, left_on=["ID1", "ID2"], right_on=["ID1", "ID2"])

如果您只需要一些列,请在合并之前或之后使用 drop 方法。


推荐阅读