Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:使一列的值等于另一列的值_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 熊猫:使一列的值等于另一列的值

Python 熊猫:使一列的值等于另一列的值,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,希望是一个来自熊猫新手的非常简单的问题 如何使数据帧中一列的值等于另一列的值?替换每行中的值。没有条件等 上下文: 我有两个CSV,分别加载到数据帧“a”和数据帧“b”中 这些CSV基本上是相同的,除了“a”有一个字段从另一个进程不正确地结转-浮点被四舍五入为整数。不是我的剧本,不能影响它,我现在只有CSV 实际上,在合并的数据帧中,我可能有2mil行和大约60-70列——因此,如果可以通过它们的标题来寻址这些列(在本例中是Col1和xyz_Col1),那肯定会有帮助 我已经加入了CSV的公共字

希望是一个来自熊猫新手的非常简单的问题

如何使数据帧中一列的值等于另一列的值?替换每行中的值。没有条件等

上下文:

我有两个CSV,分别加载到数据帧“a”和数据帧“b”中

这些CSV基本上是相同的,除了“a”有一个字段从另一个进程不正确地结转-浮点被四舍五入为整数。不是我的剧本,不能影响它,我现在只有CSV

实际上,在合并的数据帧中,我可能有2mil行和大约60-70列——因此,如果可以通过它们的标题来寻址这些列(在本例中是Col1和xyz_Col1),那肯定会有帮助

我已经加入了CSV的公共字段,因此现在我有了一个场景,其中我有一个数据帧,可以用以下内容表示:

+--------+------+--------+------------+----------+----------+
| CellID | Col1 |  Col2  | xyz_CellID | xyz_Col1 | xyz_Col2 |
+--------+------+--------+------------+----------+----------+
|      1 |    0 | apple  |          1 | 0.23     | apple    |
|      2 |    0 | orange |          2 | 0.45     | orange   |
|      3 |    1 | banana |          3 | 0.68     | banana   |
+--------+------+--------+------------+----------+----------+
结果应为Col1=xyz_Col1:

+--------+------+--------+------------+----------+----------+
| CellID | Col1 |  Col2  | xyz_CellID | xyz_Col1 | xyz_Col2 |
+--------+------+--------+------------+----------+----------+
|      1 | 0.23 | apple  |          1 | 0.23     | apple    |
|      2 | 0.45 | orange |          2 | 0.45     | orange   |
|      3 | 0.68 | banana |          3 | 0.68     | banana   |
+--------+------+--------+------------+----------+----------+
到目前为止,我在代码中拥有:

import pandas as pd

a = pd.read_csv('csv1.csv')
b = pd.read_csv('csv2.csv')
#b = b.dropna(axis=1) drop any unnamed fields

#defind 'b' cols by adding an xyz_ prefix as xyz is unique
b = b.add_prefix('xyz_')

#Join the dataframes into a new dataframe named merged
merged = pd.merge(a, b, left_on='Col1', right_on='xyz_Col1')

merged.head(5)

#This is where the xyz_Col1 to Col1 code goes...

#drop unwanted cols
merged = merged[merged.columns.drop(list(merged.filter(regex='xyz')))]

#output to file
merged.to_csv("output.csv", index=False)
谢谢

merged['col1'] = merged['xyz_Col1']


谢谢你的回答-我会在早上试一试,如果它有效的话,我会把它改成正确的。是否有理由使用一个而不是另一个?有时您需要更新特定行的值而不是所有行的值,假设您只想对apple执行相同的操作:
merged.loc[merged['Col2']=='apple','col1']=merged.loc[merged['Col2']=='apple',xyz_col1']
So,上面将执行相同的操作,但仅适用于COL2中的apple。这只是简单的合并,如果不更改列名,将根据参数
如何
merged.loc[:, 'col1'] = merged.loc[:, 'xyz_Col1']