import pandas as pd
articles = {"number": ["111", "222", "333"],
"price": [12.46, 33.66, 43.35],
"name": ["Article1", "Article2", "Article3"],
"newprice": [11.24, None, None]}
df = pd.DataFrame(articles)
print(df)
# Select empty entries
mask = df['newprice'].isnull()
# Version 1 (not working)
df.loc[mask, ['newprice']] = df.loc[mask, ['price']]
print(df)
# Output
# number price name newprice
# 0 111 12.46 Article1 11.24
# 1 222 33.66 Article2 NaN
# 2 333 43.35 Article3 NaN
# Version 2 (working)
df.loc[mask, ['newprice']] = df['price']
print(df)
# Output
# number price name newprice
# 0 111 12.46 Article1 11.24
# 1 222 33.66 Article2 33.66
# 2 333 43.35 Article3 43.35
在版本1中,“ newprice”列中仍然存在Nans,而在版本2中,值已按预期复制。我用相同的蒙版过滤作业的两面,因此应该有一个完全匹配。我的意思是要知道,被分配人的双方都必须提供完全相同数量的结果。那么为什么版本1不起作用?
预先感谢您的帮助。
答案 0 :(得分:1)
如果两个[]
中都有loc
,我认为这是一个问题,因此您要分配一个列DataFrame
。 price
与newprice
的名称不同,所以失败了。
解决方案已删除[]
,分配给Series
:
df.loc[mask, 'newprice'] = df.loc[mask, 'price']
print(df)
number price name newprice
0 111 12.46 Article1 11.24
1 222 33.66 Article2 33.66
2 333 43.35 Article3 43.35
分配一列DataFrame
是相似的,没有条件(失败):
df.loc[mask, 'newprice'] = df[['price']]
vs分配Series
(有效):
df.loc[mask, 'newprice'] = df['price']
答案 1 :(得分:-1)