连接类似的数据框列,对它们进行排序并填充np.NaN

2024-05-14 22:40:57 发布

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

我正在尝试用一列连接多个DataFrame对象,每个对象都有相似的字符串值。我希望输出是一个数据帧,字符串值按字母顺序排列,其他列中缺少的值用np.NaN填充

import pandas as pd
import numpy as np

数据帧

list1 = [{'1':'APA'}, {'1':'HBO'}, {'1': 'JRC'}]
list2 = [{'2':'ABC'}, {'2':'HBO'}, {'2': 'JRC'}, {'2':'XYZ'}]
list3 = [{'3':'QRS'}, {'3':'XYZ'}]

df1 = pd.DataFrame(list1)
df2 = pd.DataFrame(list2)
df3 = pd.DataFrame(list3)

这些看起来像这样:

df1

     1
0  APA
1  HBO
2  JRC

df2

     2
0  ABC
1  HBO
2  JRC
3  XYZ

df3

     3
0  QRS
1  XYZ

我希望最终输出如下所示:

df_连接

     1    2    3
0  NaN  ABC  NaN
1  APA  NaN  NaN
2  HBO  HBO  NaN
3  JRC  JRC  NaN
4  NaN  NaN  QRS
5  NaN  XYZ  XYZ

我尝试过使用两个outer join操作,但这只是将NaN放在每列的开头或结尾。如果你有什么建议,请告诉我。多谢各位


Tags: 数据对象字符串importdataframeasnpnan
1条回答
网友
1楼 · 发布于 2024-05-14 22:40:57

设置所有索引(这可能非常慢)np.unique负责字母排序


def f(df, total):
    return df.set_index(df.iloc[:, 0]).reindex(total)

un = np.unique(np.concatenate((df1.values, df2.values, df3.values)))

pd.concat([*map(f, [df1, df2, df3], (un,)*3)], axis=1).reset_index(drop=1)

     1    2    3
0  NaN  ABC  NaN
1  APA  NaN  NaN
2  HBO  HBO  NaN
3  JRC  JRC  NaN
4  NaN  NaN  QRS
5  NaN  XYZ  XYZ

相关问题 更多 >

    热门问题