将一列的筛选行设置为与另一列的筛选行相等

2024-06-16 11:14:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pandas中有一个数据帧,如下所示:

import pandas as pd
import numpy as np

df = pd.DataFrame({'name' : pd.Series(['Alex', 'John', 'Christopher', 'Dwayne']),
                   'value' : pd.Series([1., 2., 3., 4.]),
                   'new_value' : pd.Series([np.NaN, 4, 5, 10])})

df
Out[1]: 
          name  value  new_value
0         Alex    1.0        NaN
1         John    2.0        4.0
2  Christopher    3.0        5.0
3       Dwayne    4.0       10.0

现在我想更新value列,如果新值不是NaN。我进行了搜索,找到了这个答案:Efficient way to update column value for subset of rows on Pandas DataFrame?,这使我得到了以下(正确的)结构:

df.loc[~df.new_value.isnull(), 'value'] = df.new_value

我的问题是,这是如何工作的?为什么分配的右侧也会被loc过滤


Tags: nameimportdataframepandasdfnewvalueas
1条回答
网友
1楼 · 发布于 2024-06-16 11:14:03

~df.new_value.isnull()将在~具有True{}值(True变为FalseFalse变为True)后提供与数据相反的数据

这些值具有索引。因此,您通过刚刚筛选的索引(第一个参数)定位df,并且确保只选择value的值

df = pd.DataFrame({"ali":[1,2,3,4,5,6,7],"mali":[4,2,6,4,5,6,10]})
df["kouki"] = df.loc[~(df.ali>3),"mali"]

# output
ali mali    kouki
0   1   4   4.0
1   2   2   2.0
2   3   6   6.0
3   4   4   NaN
4   5   5   NaN
5   6   6   NaN
6   7   10  NaN



df = pd.DataFrame({"ali":[1,2,3,4,5,6,7],"mali":[4,2,6,4,5,6,10]})
df["kouki"] = df.loc[(df.ali>3),"mali"]

# otuput
ali mali    kouki
0   1   4   NaN
1   2   2   NaN
2   3   6   NaN
3   4   4   4.0
4   5   5   5.0
5   6   6   6.0
6   7   10  10.0

相关问题 更多 >