pandas 合并/连接行中的候选索引

mwngjboj  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(130)

在pandas Dataframe 中,有一个名为candidates的列。此列给出了一个包含多个索引的列表。
| 索引|色谱柱1|候选人|
| - -----|- -----|- -----|
| 0|三十四|[2,3,22]|
| 一个|四十二|[0,4,30,9]|
| 2|二三一|......这是什么?|
| 3|一百二十三|......这是什么?|
| ......这是什么?|......这是什么?|......这是什么?|
我正在寻找加入/合并dataframe本身根据这些候选人,就像下面的例子...
| 索引|色谱柱1|索引|色谱柱1|
| - -----|- -----|- -----|- -----|
| 0|三十四|2|二三一|
| 0|三十四|3|一百二十三|
| 0|三十四|二十二|四十五|
| 一个|四十二|0|三十四|
| 一个|四十二|4|九百|
| 一个|四十二|三十|八十七|
在Pandas身上如何做到这一点呢?
注意:列1_y值来自原始 Dataframe 中的列1。

esbemjvw

esbemjvw1#

您可以使用explodemerge(在rename之后):

out = (df
   .explode('Candidates')
   .merge(df[['Index', 'Column 1']]
          .rename(columns={'Index': 'Candidates'}),
          on='Candidates', how='left'
         )
)

输出:

Index  Column 1_x Candidates  Column 1_y
0      0          34          2       231.0
1      0          34          3       123.0
2      0          34         22         NaN
3      1          42          0        34.0
4      1          42          4         NaN
5      1          42         30         NaN
6      1          42          9         NaN
7      2         231        NaN         NaN
8      3         123        NaN         NaN

可复制输入:

df = pd.DataFrame({'Index': [0, 1, 2, 3],
                   'Column 1': [34, 42, 231, 123],
                   'Candidates': [[2, 3, 22], [0, 4, 30, 9], [], []]})
if“Index”是index:
out = (df
   .explode('Candidates')
   .merge(df[['Column 1']],
          left_on='Candidates', right_index=True, how='left'
         )
)

输出:

Column 1_x Candidates  Column 1_y
0          34          2       231.0
0          34          3       123.0
0          34         22         NaN
1          42          0        34.0
1          42          4         NaN
1          42         30         NaN
1          42          9         NaN
2         231        NaN         NaN
3         123        NaN         NaN

可复制输入:

df = pd.DataFrame({'Column 1': [34, 42, 231, 123],
                   'Candidates': [[2, 3, 22], [0, 4, 30, 9], [], []]},
                 index=[0, 1, 2, 3])

相关问题