【问题标题】:Group rows based on condition on multiple Column values in pandas根据熊猫中多个列值的条件对行进行分组
【发布时间】:2020-04-09 14:37:54
【问题描述】:

我有一个如下数据框:

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

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

【问题讨论】:

  • 到目前为止您尝试了什么?我建议看看shift,也许是abslt

标签: pandas merge conditional-statements rows


【解决方案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

【讨论】:

  • 它给了我MergeError: key must be integer or timestamp。我必须把它转换成int吗?
  • @abhi1610 - yop,或者如果可能的话升级熊猫,我认为在新版本中没有错误
猜你喜欢
  • 2023-01-11
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 2022-11-23
  • 2022-06-10
  • 1970-01-01
相关资源
最近更新 更多