我有一个如下数据框:
text x0 x1
abc 30.000 81.140
def 94.000 118.450
xyz 121.230 141.230
1234 144.010 155.670
5678 161.230 204.570
dgdfg 207.350 222.910
dfgdf 277.000 304.780
fdfgdfgdfgdf 400.310 462.000
dfgdfgdftt 503.310 565.000
915417953130 94.000 160.720
915417218199 277.000 343.720
我想基于text
与x1
之间的接近程度对x0
进行分组,就好像当前行x0
与前一行{{1}比x1
大约10的}应该合并。
例如。这里text
和'def'
应该合并,因为'xyz'
接近上一行121.23(x0)
。我想在118.450(x1)
中实现。
答案 0 :(得分:1)
我相信您可以将merge_asof
与公差参数一起使用:
df1 = df[['text','x0']].sort_values('x0')
df2 = df[['text','x1']].sort_values('x1')
df = pd.merge_asof(df1, df2, left_on='x0', right_on='x1', tolerance=10)
df['new'] = df['text_x'] + ' ' + df['text_y']
print (df)
text_x x0 text_y x1 new
0 abc 30.00 NaN NaN NaN
1 def 94.00 NaN NaN NaN
2 915417953130 94.00 NaN NaN NaN
3 xyz 121.23 def 118.45 xyz def
4 1234 144.01 xyz 141.23 1234 xyz
5 5678 161.23 915417953130 160.72 5678 915417953130
6 dgdfg 207.35 5678 204.57 dgdfg 5678
7 dfgdf 277.00 NaN NaN NaN
8 915417218199 277.00 NaN NaN NaN
9 fdfgdfgdfgdf 400.31 NaN NaN NaN
10 dfgdfgdftt 503.31 NaN NaN NaN