繁体   English   中英

根据其他行和列的多个条件在数据框中创建新列? 包括空行? - 蟒蛇/熊猫

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM