gpt4 book ai didi

python - 对屏蔽数据帧进行就地操作

转载 作者:行者123 更新时间:2023-11-30 22:23:55 24 4
gpt4 key购买 nike

我对 pandas 有点菜鸟,我正在尝试使用 apply 对屏蔽数据帧的部分内容执行一些计算和修改。我想要操作的部分是由我的掩码定义的,我不想修改任何非掩码值。

问题是,我不知道将屏蔽数据帧上的 apply 调用的结果放回到原始数据帧(或其副本,没关系)。

这是我正在努力解决的问题的玩具示例,我将尝试使用掩码将 A 列中的所有值设为负数并应用:

import pandas as pd 
import numpy as np


def make_df():
np.random.seed(4)
df = pd.DataFrame(np.random.randn(5, 2),columns=["A","B"])
return df

df = make_df()
mask = (df["A"]>0)

print(df)

A B
0 0.050562 0.499951
1 -0.995909 0.693599
2 -0.418302 -1.584577
3 -0.647707 0.598575
4 0.332250 -1.147477

预期结果是这样的:

          A         B
0 -0.050562 0.499951
1 -0.995909 0.693599
2 -0.418302 -1.584577
3 -0.647707 0.598575
4 -0.332250 -1.147477

我希望能起作用的是:

df = make_df()

df[mask]["A"] = df[mask]["A"].apply(lambda v: -v)
print(df)

A B
0 0.050562 0.499951
1 -0.995909 0.693599
2 -0.418302 -1.584577
3 -0.647707 0.598575
4 0.332250 -1.147477

但它失败了,pandas 警告我 df[mask]["A"] 是副本而不是 View ,因此对其进行修改不会影响 df

最佳答案

尝试使用loc[]:

In [11]: df.loc[mask, 'A'] *= -1

In [12]: df
Out[12]:
A B
0 -0.050562 0.499951
1 -0.995909 0.693599
2 -0.418302 -1.584577
3 -0.647707 0.598575
4 -0.332250 -1.147477

关于python - 对屏蔽数据帧进行就地操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com