我有一个数据集,其中有5列和多行。
需要根据状态相乘值
由于要执行的数学运算,我对执行此逻辑感到震惊。
给出的所有示例都是根据条件集创建新列,但这需要在现有列中进行修改。
我们将不胜感激。
答案 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(对于气/蒸气状态),如果否,则返回相同的值作为原始的。