[英]Create new Python DataFrame column based on conditions of multiple other columns
[英]Creating a new column in dataframe based on multiple conditions from other rows and columns? Including rows that are null? - Python/Pandas
我正在处理从电子表格导入的 Pandas 中的数据框,并尝试根据来自其他列/行的多个条件要求创建一个新列。
到目前为止,我用来创建名为“SPOTTED”的新列的代码如下:
df['SPOTTED'] = np.where((df['Work_Date'].notnull()) & (df['Time_Code'] == 'WRK'), 'No', ' ')
它产生下图中的输出,创建“SPOTTED”列,并且只用“No”填充列中的行,其中“Time_Code”列中的值为“WRK”,“Work_Date”列中的行不为空/空值:
工作表上代码的当前输出:
我想完全这样做,但在“Time_Code”列下包含多个类别,除了“WRK”。
当我尝试这样的事情以相同的方式定位多个“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
保持不变,等待您澄清可能的值及其用途。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.