我正在处理从电子表格导入的 pandas 中的数据框,并尝试根据其他列/行的多个条件要求创建一个新列。
到目前为止,我用来创建名为“SPOTTED”的新列的代码如下:
df['SPOTTED'] = np.where((df['Work_Date'].notnull()) & (df['Time_Code'] == 'WRK'), 'No', ' ')
这会产生下图中的输出,创建“SPOTTED”列,并且仅用“No”填充该列中的行,其中“Time_Code”列中的值为“WRK”,“Work_Date”列中的行为不为空/空:
工作表上代码的当前输出:
我确实想这样做,但除了“WRK”之外,还包括“Time_Code”列下的多个类别。
当我尝试类似的操作以相同的方式定位多个“Time_Code”值并更新“SPOTTED”列时:
df['SPOTTED'] = np.where((df['Work_Date'].notnull()) & (df['Time_Code'] == 'WRK'), 'No', ' ')
df['SPOTTED'] = np.where((df['Work_Date'].notnull()) & (df['Time_Code'] == 'OFF'), 'No', ' ')
df['SPOTTED'] = np.where((df['Work_Date'].notnull()) & (df['Time_Code'] == 'VAT'), 'No', ' ')
Python 仅执行其中一行代码并应用于数据帧,而不是应用所有三行代码来创建和更新“SPOTTED”列。
一旦完成并能够将其记录下来,我最终会尝试将数据框导出到 CSV 文件。
我将不胜感激任何帮助/见解,仍在学习 python 和 pandas 的工作方式。
谢谢!对于任何糟糕的解释,我们深表歉意。
最佳答案
您共享的用于分配多个值的代码不起作用的原因是 df['SPOTTED'] =
分配给整个列。因此,代码不断创建和覆盖同一列。
下次遇到此类问题时,请尝试在每次操作后查看 df
的内容。
我相信这是最惯用的解决方案。我从 @Henry Yik 那里偷了虚拟数据,希望他们不要介意。
import numpy as np
import pandas as pd
df = pd.DataFrame({'work_date': [1, 2, 3, 4, np.nan], 'time_code': ['WRK', 'OFF', 'VAT', 'BONUS', 'OT15']})
select_time_codes = ['VAT', 'WRK', 'OFF']
df.loc[df['work_date'].notna() & df['time_code'].isin(select_time_codes), 'spotted'] = 'No'
这就是 DataFrame 之后的样子:
work_date time_code spotted
0 1.0 WRK No
1 2.0 OFF No
2 3.0 VAT No
3 4.0 BONUS NaN
4 NaN OT15 NaN
这些值被分配为字符串'No'
,并且NaN
保持不变,等待您对可能的值及其用途进行澄清。
关于python - 根据其他行和列的多个条件在数据框中创建新列?包括空行? - python / Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59187488/