python - Pandas 替换多个值

标签 python pandas dataframe

下面是示例数据框

>>> df = pd.DataFrame({'a': [1, 1, 1, 2, 2],  'b':[11, 22, 33, 44, 55]})
>>> df
      a   b
   0  1  11
   1  1  22
   2  1  33
   3  2  44
   4  3  55

现在我想根据索引更新/替换与其他字典中的列匹配的 b 值

例如:

match = {1:[111, 222], 2:[444, 555]}

输出:

      a   b
   0  1  111
   1  1  222
   2  1  33  <-- ignores this bcz not enough values to replace in match dict for 1 
   3  2  444
   4  3  555

提前致谢

最佳答案

这是一种方法。这个想法是按组计算累积计数并使用它来过滤行。使用 itertools.chain 创建单个值数组。最后,使用pd.DataFrame.loc和 bool 索引来设置值。

from itertools import chain

count = df.groupby('a').cumcount() + 1

m1 = df['a'].isin(match)
m2 = count.le(df['a'].map(match).map(len))
values = list(chain.from_iterable(match.values()))

df.loc[m1 & m2, 'b'] = values

print(df)

   a    b
0  1  111
1  1  222
2  1   33
3  2  444
4  2  555

关于python - Pandas 替换多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52222676/

相关文章:

javascript - Python Unix 时间在 Javascript 中不起作用

python - Pygame 如何显示变量?

python - 合并数据帧并创建 NaN 值而无需重新排序

python - Pandas 数据透视表 : a very surprising result with aggfunc len(x. unique()) 和边距=True

r - 从 data.frame 中提取行标签 (?)

python - 如何从 pandas 中的一系列数据帧中删除空数据帧?

python - 如何使用 Openpyxl 检测 Excel 文档中的隐藏行

python - 判断输入列表是否严格递增

python - 将 CSV 缩减采样 10 倍并将其保存到另一个文件中

python - 如何在 for 循环中将 DataFrames 添加到 Excel 工作簿?