【问题标题】:Updating Pandas data fram cells by condition按条件更新 Pandas 数据框单元格
【发布时间】:2021-12-31 15:33:10
【问题描述】:

我有一个数据框,想根据另一列的条件更新一列中的特定单元格。

   ID Name Metric     Unit  Value
2   1   K2     M1  msecond      1
3   1   K2     M2      NaN     10
4   2   K2     M1  usecond    500
5   2   K2     M2      NaN      8

条件是,如果Unit字符串为msecond,则将Value列中的对应值乘以1000,存放在同一个地方。考虑行迭代的恒定步长(二乘二),下面的代码是不正确的

i = 0
while i < len(df_group):
    x = df.iloc[i].at["Unit"]
    if x == 'msecond':
        df.iloc[i].at["Value"] = df.iloc[i].at["Value"] * 1000
    i += 2

但是,输出与修改前相同。我该如何解决?还有什么替代方法可以更好地编码而不是那个while循环?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    一个更简单(也更有效)的形式是使用loc

    df.loc[df['Unit'] == 'msecond', 'Value'] *= 100
    

    如果您认为它本质上只更新索引的特定步骤:

    step = 2
    start = 0
    df.loc[df['Unit'].eq('msecond') & (df.index % step == start), 'Value'] *= 100
    

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 2021-05-21
      • 2022-12-15
      • 1970-01-01
      • 2017-12-28
      • 2017-08-27
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      相关资源
      最近更新 更多