python - 添加条件值位于某些其他列中任意位置的列

标签 python pandas numpy dataframe

我看到了许多有关向数据帧添加条件列的问题,这些问题通常依赖于使用np.where()。据我所知, np.where() 只在它附加的同一行中查找。例如:

# Create df with 3 columns of random numbers from 0 to 100
df = pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns=list('ABC'))

---------------
A    B    C
23   16   85
 9   74   12
99   24   83
---------------
# Add new column based on values in other columns
conditions = [
    (df['A'] == 9),
    (df['B'] == 16)),
    (df['A'] == 99) & (df['C'] == 83)]
choices = ['Good', ' Better', 'Best']
df['How_Good'] = np.select(conditions, choices, default='Awful')

---------------
A    B    C    How_Good
23   16   85    Better
 9   74   12     Good
99   24   83     Best
---------------

在这种情况下,新列的值直接对应于同一行中其他列的值。

但是,我想生成一个列,该列的值基于特定列中的任何值。例如,假设我有一个 df:

d = {'ID': [1, 2, 3], 'Name': ['Al', 'Mo', 'Q'], 
        'Owned': ['Car', 'Truck', 'Bike'],
        'ID_1': [5, 7, 1], 'Name_1':['Jo', 'Ry', 'We']}
df = pd.DataFrame(data=d)

------------
ID   Name    Owned    ID_1    Name_1
1     Al      Car       5       Jo
2     Mo     Truck      7       Ry
3     Q      Bike       1       We
------------

现在我想添加另一列Match,当ID_1 == ID时显示Owned的值,但不一定在同一列排。基本上,它必须对照 ID_1 中的每个值检查 ID,并在找到匹配项后停止。因此带有附加列的 df 看起来像:

------------
     ID   Name    Owned    ID_1    Name_1    Match
0    1     Al      Car       5       Jo       nan
1    2     Mo     Truck      7       Ry       nan
2    3     Q      Bike       1       We       Car
------------

在上面的示例中,第 0 行中的 ID 与第 2 行中的 ID_1 匹配(没有其他匹配项)。然后,它从第 0 行获取 Owned 的值并将其放入 Match 中。因此,新列 Match 正在整个数据帧中查找 IDID_1 之间的匹配项。当这是 true 时,它​​将把 Owned 中的值放入 Match 中,否则 nan

需要注意的是,Owned 下只有一定数量的元素:只能是汽车、卡车或自行车。但 IDID_1 都可以重复多次。还有更多用于 ID_2ID_3 等的列,所有这些列都与 ID 匹配并使用 Owned 中的值.

最佳答案

您可以使用DataFrame.apply,如下所示:

df['Match'] = df.apply(lambda row: df[df['ID'] == row['ID_1']].loc[:, 'Owned'], axis=1)

如果您有更复杂的条件,您可能需要将它们放入一个函数中,然后应用它。

关于python - 添加条件值位于某些其他列中任意位置的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002792/

相关文章:

python - 如何检查 Docker 容器微服务中的 python 日志记录

python - 统计1年内每个ID的行数

python - 使用 Pandas 将两个数字列有条件地相乘

python - 如何将空格分隔的数据读入 numpy 数组?

python - Chainer 问题中的自动编码器

列的 Python 分组

python - pandas_datareader,导入错误 : cannot import name 'urlencode'

python - Pandas DataFrame --> GroupBy --> 多索引过程

Pandas groupby 在系列末尾填充零值

python - 如何从字节串中恢复二维 numpy.array?