【问题标题】:how to update pandas column multiple values based on another column如何根据另一列更新熊猫列的多个值
【发布时间】:2022-11-16 01:45:58
【问题描述】:

所以我正在为一个项目创建一个虚拟数据,这个表有一百万行:

您可以看到 sub-reason 列包含所有 NaN 值,因为我正在创建这些数据。我想要的是根据原因列放置一个值:

  1. 如果原因是“维护”,我想在以下之间放置一个随机值:['Indoor Connection','Last Mile Connection']
  2. 如果原因是“新连接”,我想在['延迟连接','连接请求']之间放置一个随机值
  3. 如果原因是“计费”,我想在 ['Update Request','Change Personal Info'] 之间设置一个随机值
  4. 如果原因是投诉,我想在 ['Wire Cut','Bad Service'] 之间设置一个随机值

    所以我所做的是一个非常基本的方法:

    for i in range(len(cop2)):
        if cop2['Reason'].loc[i][0] == 'Maintenance':
            cop2['Sub-Reason'].loc[i][0] = np.random.choice(list(subReason1))
        if cop2['Reason'].loc[i][0] == 'Connection':
            cop2['Sub-Reason'].loc[i][0] = np.random.choice(list(subReason2))
        if co2['Reason'].loc[i][0] == 'Billing':
            cop2['Sub-Reason'].loc[i][0] = np.random.choice(list(subReason3))
        if cop2['Reason'].loc[i][0] == 'Complaints':
            cop2['Sub-Reason'].loc[i][0] = np.random.choice(list(subReason4))            
    

    它工作正常,但需要很长时间(50 分钟)。我怎样才能以一种不需要很长时间但可以正常工作的方式做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您是否尝试过应用方法? ,它可能更快

          df['Sub-Reason'] = df['Reason'].apply(
              lambda x: np.random.choice(list(subReason1)) if x=='Maintenance' 
              else (np.random.choice(list(subReason2)) if x=='Connection' 
    else (np.random.choice(list(subReason3)) if x=='Billing' 
    else np.random.choice(list(subReason4))) ))
    

    【讨论】:

    • 是的,我试过了,但是你不能使用 elif 你只能使用 else 如果你尝试 elif 它说无效语法
    • 我编辑了响应以避免语法错误
    • 仍然不起作用:/:系列的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
    • 这很奇怪,我在样本数据上对其进行了测试并且工作正常,你在应用之前设置 df['reason'] 对吗?
    【解决方案2】:
    data_df.loc[data_df['Reason'] == 'Maintenance', 'Sub Reason'] = np.random.choice(list(subReason1))
    data_df.loc[data_df['Reason'] == 'New Connection', 'Sub Reason'] = np.random.choice(list(subReason2))
    data_df.loc[data_df['Reason'] == 'Billing', 'Sub Reason'] = np.random.choice(list(subReason3))
    data_df.loc[data_df['Reason'] == 'Complaints', 'Sub Reason'] = np.random.choice(list(subReason4))
    

    【讨论】:

    • 没有工作:“[Index([('Reason',)], dtype='object')] 都不在 [index] 中”
    猜你喜欢
    • 2018-04-06
    • 2019-08-11
    • 2019-09-29
    • 2018-08-15
    • 2021-09-03
    • 1970-01-01
    • 2020-12-11
    • 2023-02-05
    • 1970-01-01
    相关资源
    最近更新 更多