python pandas数据框联合合并列表到索引

Posted

技术标签:

【中文标题】python pandas数据框联合合并列表到索引【英文标题】:python pandas dataframe union merge list into index 【发布时间】:2021-05-27 02:17:44 【问题描述】:

我有一个值列表,我想保证所有值都存在于数据框的索引中。

我已经使用以下方法实现了这一点,但想知道我能以更简单的方式做到这一点吗?我尝试了各种~ ... .isin 构造,但未能得到我想要的 谢谢

#df1 is my data frame 
df1=pd.DataFrame('i':[1, 3, 5, 7], 
                 'a':[2, 4, 6, 8])
df1.set_index(['i'], inplace=True)
df1

# l is the list containing index values
# i make this a data frame with an index but no columns so i can use merge
l=[3, 4, 5]
df=pd.DataFrame(l)
df.set_index([0], inplace=True)
df.index.names=['i']
df

使用合并添加任何缺失的索引值

df1.merge(df, how='outer', on='i', sort=True)

【问题讨论】:

【参考方案1】:

reindexpd.Index.union 一起使用(假设您没有任何重复的DataFrame 索引值或l 中的重复值)

import pandas as pd

df1 = pd.DataFrame('i':[1, 3, 5, 7], 'a':[2, 4, 6, 8]).set_index('i')
l = [3, 4, 5]

df1 = df1.reindex(df1.index.union(l))
#     a
#i     
#1  2.0
#3  4.0
#4  NaN
#5  6.0
#7  8.0

【讨论】:

感谢您抽出宝贵时间@ALollz - 熊猫宝宝在这里 没问题!如果您需要处理重复,事情可能会变得有点复杂,因为您需要决定是否希望这些行成倍增长,但如果您确定最终需要一个非重复索引,这将运作良好。 我不知道index.union() 可以接受一个列表,我认为它必须先转换为pd.Index(l)。很高兴知道。 @rhug123 是的,很多 pandas 方法都相当灵活,因为它们接受大多数类似数组的输入,在这种情况下,它将接受 listsetnp.array、@ 987654331@、tuple 和其他一些我确定我会忽略

以上是关于python pandas数据框联合合并列表到索引的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 将具有多个值的行数据合并到列的 Python 列表中

带有列名列表的 Python Pandas 索引数据框

将没有唯一索引的数据帧与 Python 和 Pandas 合并 [重复]

利用Python进行数据分析-Pandas(第五部分-数据规整:聚合合并和重塑)

Python Pandas 索引错误:列表索引超出范围

Pandas:合并具有不同索引和缺失值的两个数据框