python - 加入类似的 pandas DataFrame 列,对它们进行排序并填充 np.NaN
问题描述
我正在尝试将多个 DataFrame 对象与一列连接,每个对象具有相似的字符串值。我希望输出是单个 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_join
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
s 放在每列的开头或结尾。如果您有任何建议,请告诉我。谢谢你。
解决方案
设置所有索引!!(这可能真的很慢)。 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
推荐阅读
- apache - kill -28 和 apache 优雅停止的区别
- android - How to bypass ssl error Trust anchor for certification path not found
- r - 使用 1 年窗口计算每个月底的回报波动率
- android-sqlite - 更新日期删除sqlite android中的行
- python - 如何在给定 pid 的情况下通知守护进程
- python - 如何通过 Selenium Webdriver 查找具有动态 id 的元素
- matplotlib - .whl 文件无法从 pypi 网站下载
- r - 将列连接并求和 R
- java - 我们可以为同一个端点同时实现@pathparam 和@queryparam
- excel - 需要具有逗号分隔值的列的数据透视表