首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas Python如何使用一个数据帧中的公共数据写入不同的数据帧?

Pandas Python如何使用一个数据帧中的公共数据写入不同的数据帧?
EN

Stack Overflow用户
提问于 2018-07-15 11:49:55
回答 1查看 56关注 0票数 1

我尝试使用df4的LineNum列来标识df1中的GeneralDescription,方法是匹配LineNumbers并写入df1中相应的GeneralDescription的列单元格。我正在寻找一种可扩展的解决方案,用于处理具有数千行和其他几个无关紧要的列的数据帧。如果不是绝对必要的话,我宁愿不合并。我只想写入df1的TrueDepartment列,并保持两个数据帧的原始结构不变。谢谢-

代码语言:javascript
复制
df1
    LineNum Warehouse           GeneralDescription
0   2       Empty               Empty
1   3       Empty               Empty
2   4       PBS                 Empty
3   5       Empty               Empty
4   6       Empty               Empty
5   7       General Liability   Empty
6   8       Empty               Empty
7   9       Empty               Empty    

df4
    LineNum GeneralDescription
0   4       TRUCKING
1   6       TRUCKING-GREENVILLE,TN
2   7       Human Resources 

Desired result

    LineNum Warehouse           GeneralDescription
0   2       Empty               Empty
1   3       Empty               Empty
2   4       PBS                 TRUCKING
3   5       Empty               Empty
4   6       Empty               TRUCKING-GREENVILLE,TN
5   7       General Liability   Human Resources
6   8       Empty               Empty
7   9       Empty               Empty      

这是我到目前为止使用的包中可能会有帮助的代码。实际上,我得到的错误是KeyError:‘标签LineNum不在索引中’

代码语言:javascript
复制
import pandas as pd
import openpyxl
import numpy as np

data= [[2,'Empty','Empty'],[3,'Empty','Empty'],[4,'PBS','Empty'],[5,'Empty','Empty'],[6,'Empty','Empty'],[7,'General Liability','Empty'],[8,'Empty','Empty'],[9,'Empty','Empty']]
df1=pd.DataFrame(data,columns=['LineNum','Warehouse','GeneralDescription'])

data4 = [[4,'TRUCKING'],[6,'TRUCKING-GREENVILLE,TN'],[7,'Human Resources']]
df4=pd.DataFrame(data4,columns=['LineNum','GeneralDescription'])


for i in range(len(df1.index)):
    if df1.loc[i,'LineNum']==df4.loc['LineNum']:
        df1.loc[i,'GeneralDescription']=df4.loc['GeneralDescription']
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-15 12:05:38

mapdf4创建的Series一起使用,与fillna一起使用原始列值:

代码语言:javascript
复制
s = df4.set_index('LineNum')['TrueDepartment']
df1['TrueDepartment'] = df1['LineNum'].map(s).fillna(df1['TrueDepartment'])
print (df1)
   LineNum         Department          TrueDepartment
0        2              Empty                   Empty
1        3              Empty                   Empty
2        4                GBS                TRUCKING
3        5              Empty                   Empty
4        6              Empty  TRUCKING-GREENVILLE,TN
5        7  General Liability         Human Resources
6        8              Empty                   Empty
7        9              Empty                   Empty

使用DataFrame.merge的解决方案

代码语言:javascript
复制
df = df1.merge(df4,how='left', on='LineNum', suffixes=('','_'))
df['TrueDepartment'] = df['TrueDepartment_'].combine_first(df['TrueDepartment'])
df = df.drop('TrueDepartment_', axis=1)
print (df)
   LineNum         Department          TrueDepartment
0        2              Empty                   Empty
1        3              Empty                   Empty
2        4                GBS                TRUCKING
3        5              Empty                   Empty
4        6              Empty  TRUCKING-GREENVILLE,TN
5        7  General Liability         Human Resources
6        8              Empty                   Empty
7        9              Empty                   Empty
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51345092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档