提问人:Red shoes 提问时间:8/30/2023 更新时间:8/30/2023 访问量:34
有关使用 loc 方法基于现有列创建新列的问题
A question about using the loc method to create a new column based on existing columns
问:
我有两个名为 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列的子集中!我现在真的很困惑!我在这里遗漏了什么吗?
答:
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没错。
评论