根据熊猫中多个列值的条件对行进行分组

时间:2019-12-17 06:00:57

标签: pandas merge conditional-statements rows

我有一个如下数据框:

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

我想基于textx1之间的接近程度对x0进行分组,就好像当前行x0与前一行{{1}比x1大约10的}应该合并。 例如。这里text'def'应该合并,因为'xyz'接近上一行121.23(x0)。我想在118.450(x1)中实现。

1 个答案:

答案 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