【发布时间】:2020-04-25 04:46:50
【问题描述】:
我有一种查找问题,我尝试使用函数 replace dict zip(见下文),但这并不能完全产生我想要的结果,因为在此过程中删除了字符(下划线) .
问题
- 什么是在不删除的情况下生成 df3 的有效方法 df1 中的下划线?在我真正的问题中,df1 更大,至少(200, 500) 而不是 (2, 4),如下例所示。
- 要创建 df3,为什么我不能使用 replace dict zip 如下, 不删除 df1 中的下划线?
df1 包含以特定模式排列的带有下划线的唯一字符串:
import pandas as pd
df1 = pd.DataFrame([['1_1','1_2', '2_1', '2_2'],['1_3','1_4', '2_3', '2_4']])
df1
0 1 2 3
0 1_1 1_2 2_1 2_2
1 1_3 1_4 2_3 2_4
df2 包含 df1 中某些字符串的字典:
df2 = pd.DataFrame([['1_1',234],['1_2',456],['2_3',324],['2_4',765]], columns = ['a', 'b'])
df2
a b
0 1_1 234
1 1_2 456
2 2_3 324
3 2_4 765
我想创建 df3,其中 df1 中包含的确切字符串被替换为 df2.b 中的相应值。但是,当我运行以下代码时,df3 中 2_1、2_2 等的下划线对于 df2 中不包含的字符串会消失。
df3 = df1.replace(dict(zip(df2.a, df2.b)))
df3
0 1 2 3
0 234 456 21 22
1 13 14 324 765
df3 中的期望结果应该是:
0 1 2 3
0 234 456 2_1 2_2
1 1_3 1_4 324 765
或者,或者:
0 1 2 3
0 234 456 NaN NaN
1 NaN NaN 324 765
【问题讨论】:
标签: python pandas dictionary replace