【问题标题】:Pandas: Create new column based on mapped values from another column [duplicate]熊猫:根据另一列的映射值创建新列[重复]
【发布时间】:2020-07-07 04:12:30
【问题描述】:

我想根据 Python 中另一个列的条件创建一个新列。更具体地说,我在数据框中的一列是:

Kilos:
1. 8.0
2. 16.0
3. 12.0
4. 10.0
5. 5.0
...

我希望新列基于此列,并且每次您找到千克为 8.0 的行(在kilos 列中)时,新列的行将写入“X2 + 部分”,当列是 16.0 新列的行将写“X8 + 部分”,其他列我不关心。它们可以是空白或其他任何内容。

【问题讨论】:

标签: python python-3.x pandas dataframe


【解决方案1】:

您可以使用np.select()。您创建条件并将它们与每个条件所需的结果一起填充到方法中。

下面是你的初始数据框,然后是np.select()的条件和使用:

df=pd.DataFrame({'kilos':[8.0, 16.0, 12.0, 10.0, 5.0]})
df
   kilos
0    8.0
1   16.0
2   12.0
3   10.0
4    5.0

kilos_8 = df['kilos']==8   #condition 1
kilos_16 = df['kilos']==16  #condition 2

df['new_col']=np.select([kilos_8, kilos_16],
                        ['X2 + parts', 'X8 + parts'],
                          default=np.nan)
df
   kilos     new_col
0    8.0  X2 + parts
1   16.0  X8 + parts
2   12.0         nan
3   10.0         nan
4    5.0         nan

【讨论】:

    【解决方案2】:

    在下面的示例中,您将创建一个值映射字典 (valmap),它将用于将您的 8.0 和 16.0 值映射到您需要的文本。

    示例代码:

    import pandas as pd
    
    # Create dataset.
    data = {'Kilos': [8.0, 16.0, 12.0, 10.0, 5.0]}
    df = pd.DataFrame(data)
    
    # Create a value map dict for mapping specific values.
    valmap = {8.0: 'X2 + parts', 16.0: 'X8 + parts'}
    # Apply the value map into a new column.
    df['Text'] = df['Kilos'].map(valmap)
    
    # Show the results.
    print(df)
    

    输出:

       Kilos        Text
    0    8.0  X2 + parts
    1   16.0  X8 + parts
    2   12.0         NaN
    3   10.0         NaN
    4    5.0         NaN
    

    希望这有助于为您指明正确的方向。

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2023-02-05
      • 2019-07-12
      • 2020-10-04
      • 1970-01-01
      • 2021-09-11
      • 2019-01-23
      • 2022-12-16
      • 2018-11-01
      相关资源
      最近更新 更多