使用两个具有公共键的查询的结果来创建数据帧,而不必使用merg

2024-04-20 12:11:24 发布

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

数据集:

df = pd.DataFrame(np.random.randn(5, 4), columns=['A', 'B', 'C', 'D'],index=['abcd','efgh','abcd','abc123','efgh']).reset_index()

s = pd.Series(data=[True,True,False],index=['abcd','efgh','abc123'], name='availability').reset_index()

(请随意删除上面的reset\u索引位,它们只是为了方便地提供解决问题的不同方法。但是,我运行的查询产生的数据集与上面的数据集最为相似)

我有两个单独的查询,它们返回与上面类似的数据。一个查询从一个数据库中查询一个字段,该数据库的一列信息在另一列中不存在。“index”列是两个表中的公共键。你知道吗

我的结果集需要将第二个查询的结果序列注入到第一个查询的结果数据帧中的特定列索引中。你知道吗

我知道我可以简单地跑:

df = df.merge(s, how='left', on='index')

然后执行列顺序:

df = df[['index', 'A', 'B', 'availability', 'C', 'D']

我看到你能做到测向注入,但这要求序列与df的长度相同。你知道吗

我想知道是否有一种方法可以做到这一点,而不必运行merge,然后强制执行列顺序。在我的实际数据集中,列的数量要长得多。我认为最好的解决方案可能依赖于列表操作,但我更愿意在数据帧的创建上做一些聪明的事情。你知道吗

df.set_index(['index','id']).index.map(s['availability'])

正在返回:

TypeError: 'Series' object is not callable

S是一个具有多索引和一列布尔值的数据帧。你知道吗

df是一个包含列的数据帧,这些列构成了S的多索引


Tags: 数据方法数据库truedfindex序列merge
1条回答
网友
1楼 · 发布于 2024-04-20 12:11:24

IIUC公司:

In [260]: df.insert(3, 'availability', 
                    df['index'].map(s.set_index('index')['availability']))

In [261]: df
Out[261]:
    index         A         B  availability         C         D
0    abcd  1.867270  0.517894          True  0.584115 -0.162361
1    efgh -0.036696  1.155110          True -1.112075  2.005678
2    abcd  0.693795 -0.843335          True -1.003202  1.001791
3  abc123 -1.466148 -0.848055         False -0.373293  0.360091
4    efgh -0.436618 -0.625454          True -0.285795 -0.220717

相关问题 更多 >