用in合并两个pandas数据帧

2024-03-28 17:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个pandas数据帧,格式如下:

df_ts = pd.DataFrame([
        [10, 20, 1,  'id1'],
        [11, 22, 5,  'id1'],
        [20, 54, 5,  'id2'],
        [22, 53, 7,  'id2'],
        [15, 24, 8,  'id1'],
        [16, 25, 10, 'id1']
    ], columns = ['x', 'y', 'ts', 'id'])


df_statechange = pd.DataFrame([
        ['id1', 2, 'ok'],
        ['id2', 4, 'not ok'],
        ['id1', 9, 'not ok']
    ], columns = ['id', 'ts', 'state'])

我正在尝试将其转换为格式,例如:

^{pr2}$

我了解如何通过按id分组,然后遍历每一行并在它出现时更改状态来迭代完成它。有没有一个大熊猫可以用更具伸缩性的方式来做这个?在


Tags: columns数据iddataframepandasdf格式not
2条回答

不幸的是熊猫合并只支持平等加入。在以下线程中查看更多详细信息: merge pandas dataframes where one value is between two others 如果要按间隔合并,则需要克服此问题,例如在合并后添加另一个筛选器:

joined = a.merge(b,on='id')
joined = joined[joined.ts.between(joined.ts1,joined.ts2)]

可以在两列上合并pandas数据帧:

pd.merge(df_ts,df_statechange, how='left',on=['id','ts'])

在您在这里共享的df_statechange中,两个数据帧中的ts没有公共值。显然你只是复制了不完整的数据框。所以我得到了这个输出:

^{pr2}$

但实际上,如果在数据帧中有公共的ts,那么它将有您想要的输出。例如:

^{3}$

输出:

  x   y  ts   id   state
0  10  20   1  id1     NaN
1  11  22   5  id1      ok
2  20  54   5  id2  not ok
3  22  53   7  id2  not ok
4  15  24   8  id1      ok
5  16  25  10  id1     NaN

相关问题 更多 >