我对熊猫有点陌生,我正在尝试使用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


但是它以熊猫警告我df[mask]["A"]是副本而不是视图而失败,因此对其进行的修改不会影响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

10-07 13:31
查看更多