熊猫:根据相同的列值但不同的行和条件更新某些列值

米希尔

我正在使用Python 3.6和Pandas 0.25。

我有以下数据框:

import collections
import datetime
import pandas as pd
import numpy as np

data = {
    'col1_data': ['A1', 'A1', 'A1', 'A2', 'A2'],
    'col2_data': ['UNMAPPED', 'UNMAPPED', 'GOOD VALUE', 'UNMAPPED', 'CORRECT VALUE']
}

df = pd.DataFrame(data)

如下图所示:

display(df)

数据之前

基本上,我想将col1_data中所有“ A1”的“ col2_data”值更新为“良好值”,并将col1_data中所有“ A2”的“正确值”更新为“正确值”。

基本上我希望数据框看起来像:

数据后

基本上,我需要基于组(col1_data值)进行数据更新,但不进行聚合,即我不想减少行数。因此,如果有3行具有相同的值(A1),则所有3行的col2_data中的值都应相同(有效值),或者不等于“ UNMAPPED”。

有人可以帮忙吗?

更新1: UNMAPPED值不按任何固定顺序出现。Scot的解决方案适用于2根DF色谱柱。但是,DF有多个列(分组或检查不需要)。分组仅取决于col1_data。我们如何在DF中保留其他列?

例如

data = {
    'col1_data': ['A1', 'A1', 'A1', 'A2', 'A2'],
    'col2_data': ['UNMAPPED', 'UNMAPPED', 'GOOD VALUE', 'UNMAPPED', 'CORRECT VALUE'],
    'col3_data': ['B1', 'B2', 'B1', 'B3', 'B4']
}

df = pd.DataFrame(data)

新输入

预期产量:

预期产量

另外,如果更容易根据上述逻辑添加新的派生列,也可以。

斯科特·波士顿

如果“正确”字符串始终是组中的最后一个字符串,则可以用np.nan和bfill替换或屏蔽“ UNMAPPED”。

df.replace('UNMAPPED', np.nan).bfill()

输出:

  col1_data      col2_data
0        A1     GOOD VALUE
1        A1     GOOD VALUE
2        A1     GOOD VALUE
3        A2  CORRECT VALUE
4        A2  CORRECT VALUE

在这种情况下有效。或者,如果它是组中的第一个,则可以使用ffill()

如果它出现在组中的任何位置,则可以使用:

df['col2_data'] = df[['col2_data']].replace('UNMAPPED', np.nan).groupby('col1_data')['col2_data']\
  .transform(lambda x: x.ffill().bfill())

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据条件更新熊猫中的列值

来自分类Dev

根据条件选择行和列的值

来自分类Dev

熊猫根据不同的列插值NaN

来自分类Dev

根据条件更改熊猫中的列值

来自分类Dev

根据python中列的条件更新行值

来自分类Dev

根据不同的条件更改列中的值

来自分类Dev

根据条件pyspark计算不同的列值

来自分类Dev

熊猫:根据多列值删除行

来自分类Dev

熊猫:根据列值扩展行

来自分类Dev

熊猫根据重复的行获取列值

来自分类Dev

根据相同的列值合并csv的行

来自分类Dev

根据相同的列值合并2行

来自分类Dev

大熊猫遍历行和列,并根据某些条件进行打印

来自分类Dev

熊猫:比较数据框的列并根据条件添加新的列和值

来自分类Dev

熊猫根据其他列中的条件和值创建新列

来自分类Dev

根据熊猫数据框中其他列的条件和值创建新列

来自分类Dev

熊猫-根据行值有条件地为新列选择数据的源列

来自分类Dev

熊猫:如何根据其他列值的条件对列求和?

来自分类Dev

在表的另一列中选择具有相同id但不同值的行

来自分类Dev

在 Oracle SQL 中合并具有相同 ID 但不同列值的行

来自分类Dev

熊猫:groupby并根据某些列值获取尾部

来自分类Dev

用不同的条件更新列值

来自分类Dev

SQL-根据相同组和不同行中的其他列值更改列值

来自分类Dev

根据不同的列值选择行

来自分类Dev

根据多列中的值和相同条件在pandas中创建一个新列

来自分类Dev

更新条件给定的行和列的数组值

来自分类Dev

如何根据列值条件选择行

来自分类Dev

根据行条件替换列值

来自分类Dev

熊猫根据列中的相同值合并数据框