【问题标题】:How to conditionally update DataFrame column in Pandas based on list如何根据列表有条件地更新 Pandas 中的 DataFrame 列
【发布时间】:2016-10-24 21:56:45
【问题描述】:

假设我有一个包含一列的数据框:

df = pd.DataFrame(np.random.randint(0,9,size=(100, 1)), columns=['number'])

我有两个列表,一个包含偶数,另一个包含奇数。

odd_numbers = [1,3,5,7,9]
even_numbers = [0,2,4,6,8]

我想根据 df['number'] 中的值在数据框上创建另一个系列,显示“偶数”或“奇数”

类似:

df['odd_or_even'] = 'even' if df[number].isin(even_numbers)
df['odd_or_even'] = 'odd' if df[number].isin(odd_numbers)

【问题讨论】:

  • 重要的是列表是条件检查。

标签: python list pandas dataframe contains


【解决方案1】:

map 版本:

首先,创建一个字典:

d = {**{o: "odd" for o in odd_numbers}, **{e: "even" for e in even_numbers}}

然后在系列上使用地图:

df['odd_or_even'] = df['number'].map(d)

【讨论】:

    【解决方案2】:

    我觉得你可以用numpy.where:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.randint(0,9,size=(100, 1)), columns=['number'])
    
    df['odd_or_even'] = np.where(df.number % 2, 'odd', 'even')
    print (df)
    
        number odd_or_even
    0        1         odd
    1        0        even
    2        4        even
    3        5         odd
    4        0        even
    5        0        even
    6        1         odd
    7        0        even
    8        7         odd
    9        8        even
    

    通过评论编辑

    使用loc:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.randint(0,9,size=(20, 1)), columns=['number'])
    
    odd_numbers = [1,3,5,7,9]
    even_numbers = [0,2,4,6,8]
    
    df.loc[df.number.isin(odd_numbers), 'odd_or_even'] = 'odd'
    df.loc[df.number.isin(even_numbers), 'odd_or_even'] = 'even'
    
    print (df)
        number odd_or_even
    0        5         odd
    1        1         odd
    2        2        even
    3        3         odd
    4        5         odd
    5        6        even
    6        3         odd
    7        4        even
    8        2        even
    9        8        even
    10       8        even
    11       1         odd
    12       2        even
    13       1         odd
    14       3         odd
    15       3         odd
    16       5         odd
    17       4        even
    18       2        even
    19       5         odd
    

    【讨论】:

    • 我已经为这个例子简化了我的数据框。我实际上并没有检查奇数或偶数。我需要对照列表检查现有系列的元素。
    猜你喜欢
    • 2013-08-14
    • 2022-07-05
    • 1970-01-01
    • 2020-04-25
    • 2019-02-15
    • 2015-10-09
    • 2011-07-01
    • 2017-07-25
    • 2022-06-21
    相关资源
    最近更新 更多