【问题标题】:python pandas dataframe union merge list into indexpython pandas数据框联合合并列表到索引
【发布时间】: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)

【问题讨论】:

    标签: python pandas list indexing union


    【解决方案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 和其他一些我确定我会忽略
    猜你喜欢
    • 2016-10-28
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2021-06-25
    • 1970-01-01
    • 2016-07-23
    • 2014-08-09
    相关资源
    最近更新 更多