如果值相同,Python Pandas将列从df复制到另一个

达琼

我有两个数据框:

DF ONE:

ID     A    B    C
 1     x    y    z
 1     x    y    z
 2     x    y    z
 2     x    y    z
 2     x    y    z
 3     x    y    z

DF 2:

ID     D    E    F
 1     a    b    c1
 2     a    b    c2
 3     a    b    c3

我想以EDF TWO为例,如果ID相同,则将其放在DF ONE上,因此在得到以下输出后:

ID     A    B    C    F
 1     x    y    z    c1
 1     x    y    z    c1
 2     x    y    z    c2
 2     x    y    z    c2
 2     x    y    z    c2
 3     x    y    z    c3

谢谢您的帮助

耶斯列尔

您可以使用map通过dict

d = df2.set_index('ID')['F'].to_dict()
print (d)
{1: 'c1', 2: 'c2', 3: 'c3'}

df1['F'] = df1['ID'].map(d)
print (df1)
   ID  A  B  C   F
0   1  x  y  z  c1
1   1  x  y  z  c1
2   2  x  y  z  c2
3   2  x  y  z  c2
4   2  x  y  z  c2
5   3  x  y  z  c3

另一种解决方案是map通过Series

s = df2.set_index('ID')['F']
print (s)
ID
1    c1
2    c2
3    c3
Name: F, dtype: object

df1['F'] = df1['ID'].map(s)
print (df1)
   ID  A  B  C   F
0   1  x  y  z  c1
1   1  x  y  z  c1
2   2  x  y  z  c2
3   2  x  y  z  c2
4   2  x  y  z  c2
5   3  x  y  z  c3

时间

#[60000 rows x 5 columns]
df1 = pd.concat([df1]*10000).reset_index(drop=True)

In [115]: %timeit pd.merge(df1, df2[['ID', 'F']],how='left')
100 loops, best of 3: 11.1 ms per loop

In [116]: %timeit df1['ID'].map(df2.set_index('ID')['F'])
100 loops, best of 3: 3.18 ms per loop

In [117]: %timeit df1['ID'].map(df2.set_index('ID')['F'].to_dict())
100 loops, best of 3: 3.36 ms per loop

In [118]: %timeit df1['ID'].map({k:v for k, v in df2[['ID', 'F']].as_matrix()})
100 loops, best of 3: 3.44 ms per loop

In [119]: %%timeit 
     ...: df2.index = df2['ID']
     ...: df1['F1'] = df1['ID'].map(df2['F'])
     ...: 
100 loops, best of 3: 3.33 ms per loop

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将匹配值从一个 df 复制到另一个给定的多个条件

将列复制到另一个表,但保持相同的ID

将DataTable列的值复制到另一个DataTable行C#

用+列将表值复制到另一个表

将一列从一个DataFrame复制到另一个提供NaN值?

如何在将两个列中的公共列值匹配的同时将列从pandas数据框复制到另一个?

根据Pandas中的ID将列值从一个数据框复制到另一个数据框

将某些列值从一个表复制到另一个

根据列值将数据从一个熊猫数据框复制到另一个

将列值从一个表复制到另一个匹配ID-SQLite

将几个列值从一个表复制到另一个匹配的 ID - SQLite

将一个列条目的值复制到同一记录的另一个列,如果该值为null

将一个 Redux 表单值复制到另一个

将行值复制到另一个行值之后,然后将整行复制到另一个工作表中

将值从一个表复制到另一个具有相同ID的表

将数据帧的内容复制到另一个具有相同行和列的数据帧

无法将Excel列值复制到另一个Excel文件中的指定范围

将公式复制到另一个工作表并将其作为值粘贴到特定列

将值复制到已知单元格上的另一个更大的列

如何将列中具有特定值的行复制到另一个工作表?

将文件的相同特定部分复制到另一个文件

MySQL将数据复制到另一个ID相同的表中

如何使用python将某些csv文件列复制到另一个csv文件中?

如何使用增加的主键将表的数据复制到另一个重复的表中,以及如何使用增加的值将某些列复制到另一个重复表中。在MySQL中

如何将数组值复制到另一个数组

Android SQLite将值从表复制到另一个表

将变量的值复制到另一个

使用按钮将值复制到另一个输入

将时间戳对象的值复制到另一个对象