首页 > 解决方案 > 从另一个数据框中创建一个数据框中的列不会传输丢失的行

问题描述

我有以下两个数据框:

data = {'Name': ['Tom', 'Jack', 'nick', 'juli'], 'marks': [99, 98, 95, 90]}
df = pd.DataFrame(data, index=['rank1', 'rank2', 'rank3', 'rank4'])

data = {'salata': ['ntomata', 'tzatziki']}
df2 = pd.DataFrame(data, index=['rank3', 'rank5'])

在此处输入图像描述

在此处输入图像描述

我想要的是将 salata 列从df2复制到df1

df['salata'] = df2['salata']

但是,它不会将丢失的行rank5复制到df1

在此处输入图像描述

更新:感谢您的回答。

如果数据框具有不同的列多索引级别,我应该使用什么?

例如:

data = {('Name','Here'): ['Tom', 'Jack', 'nick', 'juli'], ('marks','There'): [99, 98, 95, 90]}
df = pd.DataFrame(data, index=['rank1', 'rank2', 'rank3', 'rank4'])

df[('salata','-')] = df2['salata']

在此处输入图像描述

标签: python-3.xpandasdataframe

解决方案


使用DataFrame.combine_first

#all columns
df = df.combine_first(df2)
#only columns in list
#df = df.combine_first(df2[['salata']])
print (df)
       Name  marks    salata
rank1   Tom   99.0       NaN
rank2  Jack   98.0       NaN
rank3  nick   95.0   ntomata
rank4  juli   90.0       NaN
rank5   NaN    NaN  tzatziki

编辑:

如果有MultiIndex第一个创建MultiIndexdf2例如MultiIndex.from_product

df2.columns = pd.MultiIndex.from_product([[''], df2.columns])

df = df.combine_first(df2)
print (df)
                 Name marks
         salata  Here There
rank1       NaN   Tom  99.0
rank2       NaN  Jack  98.0
rank3   ntomata  nick  95.0
rank4       NaN  juli  90.0
rank5  tzatziki   NaN   NaN

另一个解决方案concat

df = pd.concat([df, df2], axis=1)

推荐阅读