这个问题与Pandas相关,但不完全相同:如何通过最接近的索引匹配组合两个数据帧?.
给定两个数据框df1[['A1', 'B1']]和df2[['A2', 'B2']],我想将它们组合起来,所以我最终得到了一个数据框df3[['A2, 'B2', 'B1', 'A1']],其中 的等位基因值'A1'已与最接近'B2'的'B1'. 下面是一个示例,您会在最后找到完整的数据示例和可重现的代码。
df1:(重复 B1 = -9.33)
A1 B1
0 -128.65 -12.30
1 -117.74 -11.98
2 -117.19 -11.91
3 -109.43 -10.03
4 -93.75 -9.33
5 -87.27 -9.33
6 -85.59 -5.96
7 -76.18 -5.51
df2:
A2 B2
0 -69.06 -12.64
1 -86.88 -12.12
2 -95.95 -11.35
3 -103.87 -10.67
4 -105.78 -9.63
5 -108.11 -9.20
6 -111.07 -9.06
7 -126.42 -6.37
请注意 df2['A2'] 正在下降,而所有其他列都在上升。
期望的输出:
A2 B2 B1 A1
0 -69.06 -12.64 -12.30 -128.65
1 -86.88 -12.12 -11.98 -117.74
2 -95.95 -11.35 -10.03 -109.43
3 -103.87 -10.67 -10.03 -109.43
4 -105.78 -9.63 -9.33 -87.27
5 -108.11 -9.20 -9.33 -87.27
6 -111.07 -9.06 -5.96 -85.59
7 -126.42 -6.37 -5.96 -85.59
注意事项:
的正确匹配df2['B2']=-12.12是df1['B1']=-11.98对应的df['A1']=-117.74,因为df2['B2']=-12.12大于df2['B2']=-12.30并且-11.98是列中的下一步。
对于重复值df1['B1'].iloc[4] = df1['B1'].iloc[5] = -9.33,df1['A1'] = -87.27是正确的匹配,因为它是最大的值。
如果最佳解决方案包括将某些列设置为索引,我根本不介意!
这是一个可重现的片段:
#imports
import numpy as np
import pandas as pd
# Some sample data
np.random.seed(1234)
data1 = {'A1':sorted(np.random.normal(100, 20, 8)*-1),
'B1':sorted(np.random.normal(10, 2, 8)*-1)}
data2 = {'A2':sorted(np.random.normal(100, 20, 8)*-1,reverse = True),
'B2':sorted(np.random.normal(10, 2, 8)*-1)}
# Two dataframes
df1 = pd.DataFrame(data1).round(2)
df2 = pd.DataFrame(data2).round(2)
# Duplicate scenario 1: Duplicate A1 values
df1['B1'].iloc[4] = df1['B1'].iloc[5]
感谢您的任何建议!
九州编程
相关分类