我是Python新手,目前正在开发一个项目,需要使用该软件来执行一些数据清理任务。我想知道在Python上在两个不同形状的数据帧之间执行类似excel的索引和匹配功能是否可行。
这是我的想法
df1 中 x 列下的值本质上是 df2 中列标题的一部分,并且它们具有共同的 y 列(重复的值可能出现在 df1 中,但不会出现在 df2 中)。我想知道df1是否可以更新df2?例如df1["z"].iloc[0] 插入 df2 第 0 行和 a 列。谢谢。
新示例
import pandas as pd
data1 = {'x': ['a', 'b', 'c', 'd', 'a'], 'y': ['e', 'e', 'f', 'f', 'e'], 'z': [0, 0, 0, 0, 0]}
data2 = {'y': ['e', 'f'], 'a': [1, 5], 'b': [2, 6], 'c': [3, 7], 'd': [4, 8]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df1 和 df2
df1 df2
x y z y a b c d
0 a e 0 0 e 1 2 3 4
1 b e 0 1 f 5 6 7 8
2 c f 0
3 d f 0
4 a e 0
正如您提到的,df1 中存在重复的行
代码
out = df1.merge(df2.melt('y', var_name='x'), how='left')
输出:
x y z value
0 a e 0 1
1 b e 0 2
2 c f 0 7
3 d f 0 8
4 a e 0 1
value列是z列的更新值
如果想用value列中的值替换z列中的值,可以使用以下代码:
out = df1.merge(df2.melt('y', var_name='x'), how='left').assign(z=lambda x: x.pop('value'))
出
x y z
0 a e 1
1 b e 2
2 c f 7
3 d f 8
4 a e 1