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】:将reindex
与pd.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 方法都相当灵活,因为它们接受大多数类似数组的输入,在这种情况下,它将接受 list
、set
、np.array
、@ 987654331@、tuple
和其他一些我确定我会忽略以上是关于python pandas数据框联合合并列表到索引的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 将具有多个值的行数据合并到列的 Python 列表中
将没有唯一索引的数据帧与 Python 和 Pandas 合并 [重复]