有关使用 loc 方法基于现有列创建新列的问题

A question about using the loc method to create a new column based on existing columns

提问人:Red shoes 提问时间:8/30/2023 更新时间:8/30/2023 访问量:34

问:

我有两个名为 df 和 df2 的数据帧,行数相同。我想根据一些逻辑比较在 df 中创建一个新列,如下所示

df['new_col']='nothing'

df.loc[(df2['col2'].isna()) & (df2['col2'].isna()) & (~df['col'].isna()), 'new_col'] = df['col3']

上面的代码似乎对我的目的很有效。但是,我的期望是,由于以下原因,我会得到一个错误 “=”两侧的列不匹配。右侧是将整个列(具有 df 行的大小)放入new_col列的子集中!我现在真的很困惑!我在这里遗漏了什么吗?

Pandas DataFrame 科学数据 操作

评论

1赞 ifly6 8/30/2023
Pandas 索引的工作原理是分配给那些匹配的条目。

答:

0赞 mozway 8/30/2023 #1

在赋值中使用 Series 时,pandas 会在内部执行索引对齐。这可确保索引的两边具有相同的长度和相同的顺序。=

df = pd.DataFrame({'A': [1,2,3]})
# different order, missing indices, extra indices
s = pd.Series({2: 30, 0: 10, 4: 40})
df['B'] = s
print(df)

输出:

   A     B
0  1  10.0
1  2   NaN
2  3  30.0

如果使用列表或数组,则需要精确匹配的长度。

# runs fine
df['C'] = [1,2,3]

# triggers error
df['C'] = [1,2]
# ValueError: Length of values (2) does not match length of index (3)

评论

0赞 Red shoes 8/30/2023
谢谢!所以像 ''' df3['A'] =df4['B'] ''' 这样的东西总是在没有错误的情况下执行?
0赞 mozway 8/30/2023
@Redshoes没错。