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

标签 python pandas numpy dataframe conditional-statements

我正在处理从电子表格导入的 pandas 中的数据框,并尝试根据其他列/行的多个条件要求创建一个新列。

到目前为止,我用来创建名为“SPOTTED”的新列的代码如下:

df['SPOTTED'] = np.where((df['Work_Date'].notnull()) & (df['Time_Code'] == 'WRK'), 'No', ' ')

这会产生下图中的输出,创建“SPOTTED”列,并且仅用“No”填充该列中的行,其中“Time_Code”列中的值为“WRK”,“Work_Date”列中的行为不为空/空:

工作表上代码的当前输出:

Current Output of Code on sheet

我确实想这样做,但除了“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/

相关文章:

python - 将 ndarray 转换为 cv::Mat 的最简单方法是什么?

python - 通过在 python 中重复它的副本来调整矩阵的大小

python - 有效地计算数组中 N 个最小数字的总和

python - SQLAlchemy 中的整数字段不自动递增

Python 网页抓取 - 下载文件并将所有数据存储在 xml 中

python - 如何从pandas中提取文本数据

python - 在 groupby 对象中用 "ones"填充缺失的组合

python - __name__ 的目的是什么?

python - 如何在不删除 Python 中的其余部分的情况下将信息添加到 Excel 工作表?

python - 对 pandas 中的列值进行排序