Pandas 更新 dataframe1 中的 A 列,其中 dataframe1 column2 与 dataframe2 列匹配
Pandas update column A in dataframe1 where dataframe1 column2 matches dataframe2 column
我有 2 个数据帧:
df1 = pd.DataFrame(
[
(73, 15, 'update1', 1, 'foo'),
(63, 64, 'update2', 2, 'bar'),
(56, 72, 'update3', 3, 'foo'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
和
df2 = pd.DataFrame(
[
(73, 15, 'new1', 2, 'foo'),
(63, 64, 'new2', 3, 'bar'),
(56, 72, 'new3', 1, 'foo'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
我正在寻找一种方法将这两个数据帧连接到 D 列,然后更新 df1 的 C 列以匹配 df2 中 C 列的值。
最终结果:
df1 = pd.DataFrame(
[
(73, 15, 'new3', 1, 'foo'),
(63, 64, 'new1', 2, 'bar'),
(56, 72, 'new2', 3, 'foo'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
感谢任何帮助。
到目前为止我尝试了什么?
运行一个for循环并通过在df2中找到c列的对应值来更新df1中的值。
一种方法是使用 map
:
df1['C'] = df1.D.map(df2.set_index('D').C)
df1
A B C D E
0 73 15 new3 1 foo
1 63 64 new1 2 bar
2 56 72 new2 3 foo
其中 df2.set_index('D').C
returns 您在 df2
中需要从 D
到 C
的映射:
df2.set_index('D').C
D
2 new1
3 new2
1 new3
Name: C, dtype: object
我有 2 个数据帧:
df1 = pd.DataFrame(
[
(73, 15, 'update1', 1, 'foo'),
(63, 64, 'update2', 2, 'bar'),
(56, 72, 'update3', 3, 'foo'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
和
df2 = pd.DataFrame(
[
(73, 15, 'new1', 2, 'foo'),
(63, 64, 'new2', 3, 'bar'),
(56, 72, 'new3', 1, 'foo'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
我正在寻找一种方法将这两个数据帧连接到 D 列,然后更新 df1 的 C 列以匹配 df2 中 C 列的值。
最终结果:
df1 = pd.DataFrame(
[
(73, 15, 'new3', 1, 'foo'),
(63, 64, 'new1', 2, 'bar'),
(56, 72, 'new2', 3, 'foo'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
感谢任何帮助。
到目前为止我尝试了什么?
运行一个for循环并通过在df2中找到c列的对应值来更新df1中的值。
一种方法是使用 map
:
df1['C'] = df1.D.map(df2.set_index('D').C)
df1
A B C D E
0 73 15 new3 1 foo
1 63 64 new1 2 bar
2 56 72 new2 3 foo
其中 df2.set_index('D').C
returns 您在 df2
中需要从 D
到 C
的映射:
df2.set_index('D').C
D
2 new1
3 new2
1 new3
Name: C, dtype: object