Python Pandas 在单个单元格中进行计算

标签 python python-3.x pandas loops

我有一个 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/

相关文章:

python - Pylons - 处理 GET 和 POST 请求

python - Tornado 。如何获取原始的 request.body?

python - 当我的播放器类与我的平台类之一发生碰撞时,如何制作和结束屏幕?

python - 如何检查输出是否包含特定单词?

python - Pandas Dataframe nan 值不替换

python映射字符串拆分列表

gzip.py 中的 python 导入错误; zlib 在哪里

python - 使用 python 3 的 Mavericks 上的 PyQt4

python - 分组数据框并获得总和和计数?

python - 使用多个 DataFrame 的 pandas 中的时间偏移