因此,我编写了这段代码来搜索数据框 1 的整个仓库列,以查找出现 20 次或更多次的单元格值,如果单元格值满足此要求,则代码将写入仓库的单元格值列覆盖 GeneralDescription 列的单元格值。它正在工作,但我想添加它,这样它就不会覆盖单元格值,除非它为空或 NaN 或 ''。
import pandas as pd
df1.Warehouse=df1.Warehouse.str.upper()
出于某种奇怪的原因,我无法将下一行代码缩进四个空格
df1.loc[df1.groupby('Warehouse').Warehouse.transform('count').gt(20),'GeneralDescription']=df1.Warehouse
最佳答案
增强您的屏蔽条件,并将其与另一个指示列是否包含这些空值之一的条件相结合。
i = df1.groupby('Warehouse').Warehouse.transform('count').gt(20)
j = df1.Warehouse.isin([np.nan, 'Empty', ''])
df1.loc[i & j, 'GeneralDescription'] = df1.Warehouse
<小时/>
或者,在加载数据时,指定 na_values
,以便所有内容都变为 NaN:
df = pd.read_csv(..., na_values=['Empty', '', 'NaN', 'nan'])
然后你就可以这样做:
i = df1.groupby('Warehouse').Warehouse.transform('count').gt(20)
j = df1.Warehouse.isnull()
df1.loc[i & j, 'GeneralDescription'] = df1.Warehouse
这可以说更快。
关于python - 仅当一列中的值为空白、空或 NaN 时才更新另一列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352305/