python-3.x - 从另一个数据框中创建一个数据框中的列不会传输丢失的行
问题描述
我有以下两个数据框:
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']
解决方案
#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
第一个创建MultiIndex
,df2
例如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)
推荐阅读
- android - 如何将字幕与exoplayer android集成
- coq - 通过 uniq 的 finType 从 seq 派生 ssreflect finType
- python - 在 Python 中为 websocket 运行后台任务
- redux - React + Redux + SSR:仅在直接导航到连接的组件时找不到商店
- sql - 为下表创建唯一 ID 列
- python - 无法在本地运行的 Flask 应用程序中连接到 Google SQL
- swift - 有没有办法使用 Alamofire 进行指数退避重试
- node.js - Twit 包不返回完整的推文
- sql - mySQL , 查找每个作者最近写的书
- c++ - 没有显式使用指针的 C++ 分段错误访问类数据成员