我有一个字典,它有每个唯一键到每个唯一值的映射。我还有一个dataframe,其中有一列包含所有这些键(可能多次)。与键列相邻的列具有需要由与另一列中的键关联的值替换的值。在
我尝试过使用iloc、where和update,但似乎无法使其正常工作。在
df = pd.DataFrame({'1': ['A', 'B', 'C', 'D'],
'2': ["alpha", 2.34, 0, 4.1234],
'3': ["bravo", 20.123, 3.123123, 0],
'4': ["charlie", 20.123, 3.123123, 0],
'5': ["delta", 20.123, 3.123123, 0]},
index=['1', '2', '3', '4'])
还有字典
^{pr2}$df = pd.DataFrame({'1': ['A', 'B', 'C', 'D'],
'2': ["2", "3", "5", "10"],
'3': [7, 20.123, 3.123123, 0],
'4': [9, 20.123, 3.123123, 0],
'5': [11, 20.123, 3.123123, 0]},
index=['1', '2', '3', '4'])
这是合并的预期输出。在
你可以试试这样的方法:
将索引重置为列
^{pr2}$1
使用
Series
而不是字典;它们或多或少相似。注意,我还将它命名为"2"
,因为我们要替换列2
。在您现在可以使用下面所示的两种方式之一加入。第一个保留了以
_old
为后缀的旧列,第二个只是删除它。在如果要恢复数值索引,可以再次重置索引:
以下是第一种连接方式的输出:
请注意,即使您的示例数据在
1
中没有重复的值,但上面的方法仍然有效。在在预期结果数据框中,显示新列包含字符串而不是整数。如果这是您的期望,那么在join之前创建
Series
对象时需要提供字符串。在或者你可以在这之后改变它:
编辑:由于运营商正在寻找一种更简洁的方法来实现这一点,一种变化可能是:
编辑2:按照OP的建议,另一个选项是使用
Series.map
:编辑3:我做了一个快速的性能测试,
Series.map
方法要快得多。在设置索引和连接,可以将
join
方法的性能提高一点:相关问题 更多 >
编程相关推荐