python - 在 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
解决方案
你应该看看合并功能:
merged = df1.merge(df2, left_on=["ID1", "ID2"], right_on=["ID1", "ID2"])
如果您只需要一些列,请在合并之前或之后使用 drop 方法。
推荐阅读
- ramda.js - Ramda,在子数组中查找值
- eclipse - 如何修复 http://localhost:8080 不起作用
- php - PHP脚本(包括)不能从命令行工作
- php - 根据天数更改主页或结果
- java - 在 JPanel 中对 JButton 进行排序
- html - 我如何在 cdk-overlay-pane 旁边为 Angular 7 中的材质菜单应用自定义类
- php - 如何将内容添加到网页
- pyspark - 什么是 Apache Spark (SQL) 中的催化剂优化器?
- javascript - 如何避免 thunk 中对象的突变
- javascript - 从 Web 解析 XML 并在 google map api 上添加多个标记