我有一个 TYPE 列 和一个 VOLUME 列 如果首先检查 TYPE column == 'var1'
,我想要做什么如果是这样,我想在 VOLUME 列中进行计算。
到目前为止,我有这样的东西:
data.loc[data['TYPE'] == 'var1', ['VOLUME']] * 2
data.loc[data['TYPE'] == 'var1', ['VOLUME']] * 4
这似乎是将满足条件的整个列设置为最后一个变量。所以我最终只有两个值。
输出:
4
4
4
4
8
8
8
另一种选择:
data['VOLUME'] = data.loc[data['TYPE'] == 'var1', ['VOLUME']] * 2
这适用于第一个条件,但对第二个条件显示 NaN 然后当我运行时:
data['VOLUME'] = data.loc[data['TYPE'] == 'var2', ['VOLUME']] * 4
整列显示为 NaN。
最佳答案
考虑一个演示正在发生的事情的简单示例。
df = pd.DataFrame({'A': [1, 2, 3]})
df
A
0 1
1 2
2 3
现在,只修改“A”列中低于 2 的值。所以,试试像
df.loc[df.A < 2, 'A'] * 2
0 2
Name: A, dtype: int64
该系列在索引 0 处只有 1 行。如果您尝试将其重新分配,则隐含的假设是其他索引值将重置为 NaN。
df.assign(A=df.loc[df.A < 2, 'A'] * 2)
A
0 2.0
1 NaN
2 NaN
我们要做的是仅我们感兴趣的行。最好使用就地修改算术运算符*=
:
df.loc[df.A < 2, 'A'] *= 2
你的情况是
data.loc[data['TYPE'] == 'var1', 'VOLUME'] *= 2
关于Python Pandas 在单个单元格中进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54893706/