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

时间:2020-02-13 10:35:09

标签: python python-3.x pandas dataframe

希望熊猫新手提出一个非常简单的问题。

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

上下文:

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

这些CSV基本相同,除了'a'的字段是不正确地从另一个过程继承而来的-浮点数已四舍五入为整数。不是我的脚本,不能影响它,我现在只有CSV。

实际上,合并的数据帧中可能有200万行和大约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)

谢谢

1 个答案:

答案 0 :(得分:1)

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

merged.loc[:, 'col1'] = merged.loc[:, 'xyz_Col1']