针对一个特定列,使用来自另一数据框的数据更新一个数据框-Pandas和Python

Abob

我正在尝试使用来自另一个数据的一个特定数据列来更新一个数据框,该列称为“数据”。两个数据框都有唯一的ID校准列“ ID”。两列都有一个“数据”列。我希望df2中“数据”中的数据覆盖df1中“数据”中的条目,仅适用于df1中的行数。如果df2中没有相应的“ ID”,则df1条目应保留。

import pandas as pd

data1 = '''\
ID Data Data1
1  AA   BB
2  AB   BF
3  AC   BK
4  AD   BL'''

data2 = '''\
ID Data
1  AAB
3  AAL
4  MNL
5  AAP
6  MNX
8  DLP
9  POW'''

df1 = pd.read_csv(pd.compat.StringIO(data1), sep='\s+')
df2 = pd.read_csv(pd.compat.StringIO(data2), sep='\s+')

预期产量:

new df3 expected outcome.

ID Data Data1
1  AAB  BB
2  AB   BF
3  AAL  BK
4  MNL  BL

df2是一个永不更改的值主列表,并且具有数千个条目,而df1有时只有几百个条目。

我看过pd.merge和Combine_first,但是似乎无法获得正确的组合。

df3 = pd.merge(df1,df2,on ='ID',how ='left')

任何帮助,不胜感激。

安东vBR

创建新的数据框

这是利用更新的一种方法:

df3 = df1[:].set_index('ID')
df3['Data'].update(df2.set_index('ID')['Data'])
df3.reset_index(inplace=True)

或者我们可以使用map / dicts并重新分配(Python> = 3.5)

m = {**df1.set_index('ID')['Data'], **df2.set_index('ID')['Data']}
df3 = df1[:].assign(Data=df1['ID'].map(m))

Python <3.5:

m = df1.set_index('ID')['Data']
m.update(df2.set_index('ID')['Data'])

df3 = df1[:].assign(Data=df1['ID'].map(m))

更新df1

您愿意更新df1吗?在这种情况下:

df1.update(df2)

或者,如果ID没有索引:

m = df2.set_index('ID')['Data']
df1.loc[df1['ID'].isin(df2['ID']),'Data'] =df1['ID'].map(m)

要么:

df1.set_index('ID',inplace=True)
df1.update(df2.set_index('ID'))
df1.reset_index(inplace=True)

注意:可能有些事情更有意义了:)


完整示例:

import pandas as pd

data1 = '''\
ID Data Data1
1  AA   BB
2  AB   BF
3  AC   BK
4  AD   BL'''

data2 = '''\
ID Data
1  AAB
3  AAL
4  MNL
5  AAP
6  MNX
8  DLP
9  POW'''

df1 = pd.read_csv(pd.compat.StringIO(data1), sep='\s+')
df2 = pd.read_csv(pd.compat.StringIO(data2), sep='\s+')

m = {**df1.set_index('ID')['Data'], **df2.set_index('ID')['Data']}
df3 = df1[:].assign(Data=df1['ID'].map(m))

print(df3)

返回值:

   ID Data Data1
0   1  AAB    BB
1   2   AB    BF
2   3  AAL    BK
3   4  MNL    BL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用pandas python根据来自另一个数据框的数据更新数据框

尝试使用Python / pandas根据来自另一个数据框的一列的内部和创建一个新的数据框

Python Pandas:一个数据框中的列的行值变成另一数据框中的列

基于&运算的子集pandas数据框来自另一个数据框的列

如何使用一个数据框搜索另一数据框的值和索引

Pandas数据框-将N行数从一个数据框移至另一数据框

如何使用 Pandas 根据另一个数据框的结果更新数据框

Pandas:来自条件和另一个数据框的新列

使用条件从另一个数据框中更新值来更新pandas数据框列

Python Pandas从另一个数据框更新一个数据框值

用来自另一个数据框中的字符串匹配的平均值列向pandas数据框附加

来自另一个数据框列的值之间的 Pandas 列值

Python pandas数据框:数据框到另一个数据框

Python:将一个数据框的值添加到另一数据框的某些行

Python / Pandas:根据另一个数据框过滤和组织数据框的行和列

比较一个数据框列和另一个数据框

根据另一个数据框的值删除一个数据框的行和列

设置与特定列上的另一个数据框匹配的pandas数据框的值

用另一数据框和求和距离列的每一行值来子集一个数据框

根据Pandas中的一个公共列从另一个数据框更新多个列

Pandas - 根据另一个填充一个数据框列

根据特定列将pandas数据框列替换为另一个数据框

合并数据框列和基于另一个数据框列值的行到特定索引

在python,pandas中使用另一个数据框的多列选择一个数据框的行

如何用另一个数据框重命名pandas数据框列?

基于另一个数据框的行和列创建数据框

使用Pandas从另一个删除一个数据框

熊猫:根据索引和列将一个数据框的值替换为另一数据框的值

数据框列到另一个数据框列的总和 Python 给出 NaN