根据一列中的某些值修改4列的值

时间:2019-11-19 15:05:39

标签: python pandas

我有一个数据集,其中有5列和多行。

需要根据状态相乘值

由于要执行的数学运算,我对执行此逻辑感到震惊。

给出的所有示例都是根据条件集创建新列,但这需要在现有列中进行修改。

我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是一个可行的解决方案:

import pandas as pd 

df = pd.DataFrame(
    [
    ['Liquid', 1, 2, 21, 22],
    ['Liquid', 23, 24, 5, 6],
    ['Gas/Vapour', 27, 28, 7, 8],
    ['Gas', 9, 10, 11, 12]
    ], columns = ['col1', 'col2', 'col3', 'col4', 'col5'])

liquid_row_indices = df[df['col1'] == 'Liquid'].index.tolist()
gas_vapour__row_indices = df[df['col1'] == 'Gas/Vapour'].index.tolist()


df.iloc[liquid_row_indices, 1:] = df.iloc[liquid_row_indices, 1:].applymap(
                                  lambda x: x*1000 if x<20 else x)

df.iloc[gas_vapour__row_indices, 1:] = df.iloc[gas_vapour__row_indices, 1:].applymap(
                                       lambda x: x*1.024 if x<20 else x)

输出将是:

col1    col2    col3    col4    col5
0   Liquid  1000    2000    21.000  22.000
1   Liquid  23  24  5000.000    6000.000
2   Gas/Vapour  27  28  7.168   8.192
3   Gas 9   10  11.000  12.000

总结逻辑:

1)我们存储状态等于“流体”和“气体/蒸气”的行号

2)然后,对于数据帧中的这些行,对于所有列(第一个列除外),我们applymap使用lambda函数,并将原始值替换为lambda函数返回的值。

3)lambda函数将检查值是否小于20,如果是,则将值乘以1000(对于液态)或1.024(对于气/蒸气状态),如果否,则返回相同的值作为原始的。