【问题标题】:pandas add value to new column based on condition熊猫根据条件为新列添加价值
【发布时间】:2019-10-30 01:33:37
【问题描述】:

我一直在四处寻找,但找不到我正在寻找的答案,所以对于提出我认为是重复性的问题,我深表歉意。

我有两个数据框 - df1 是交易数据列表,而 df2 是一种键。 df1['code'] 引用 df2 中的一列。

如果在 df1 中找到的交易代码在 df2 中,我想在一个新列中向该 df1 条目附加一个值,以标识该交易是有效的。如果代码不在 df2 中,我想在同一新列中注明相反的内容。

我了解如何使用“for”循环来执行此操作,但我的理解是我应该学习如何使用 pandas 而不依赖它。

提前感谢您的帮助!

【问题讨论】:

  • 请展示您的数据框示例
  • df1['new_col'] = df1['code'].isin(df2['ref'])?

标签: python pandas dataframe


【解决方案1】:

使用numpy.where():

df1['new_col'] = numpy.where(df1['df1_code'].isin(df2['df2_code']), 'VALID', 'INVALID')

样本 DF

>>> import pandas as pd
>>> import numpy as np

>>> df1 = pd.DataFrame({'code':range(5,15), 'transaction':range(10)})
>>> df2 = pd.DataFrame({'code':range(12,22), 'transaction':range(7,17)})
>>> df1
   code  transaction
0     5            0
1     6            1
2     7            2
3     8            3
4     9            4
5    10            5
6    11            6
7    12            7
8    13            8
9    14            9
>>> df2
   code  transaction
0    12            7
1    13            8
2    14            9
3    15           10
4    16           11
5    17           12
6    18           13
7    19           14
8    20           15
9    21           16

>>> df1['new_col'] = np.where(df1['code'].isin(df2['code']), 'VALID', 'INVALID')
>>> df1
   code  transaction  new_col
0     5            0  INVALID
1     6            1  INVALID
2     7            2  INVALID
3     8            3  INVALID
4     9            4  INVALID
5    10            5  INVALID
6    11            6  INVALID
7    12            7    VALID
8    13            8    VALID
9    14            9    VALID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2019-04-28
    • 2023-01-13
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多