基于其他行和列的多个条件在dataframe中创建新列?包括空的行?Python/Pandas

2024-06-16 11:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

它在下面的图像中生成输出,创建“SPOTTED”列,并仅用“No”填充列中的行,其中“Time\u Code”列中的值为“WRK”,而“Work\u Date”列中的行不为空/null:

表上代码的当前输出:

Current Output of Code on sheet

我想这样做,但包括在'时间代码'列下的多个类别,除了只是'WRK'。你知道吗

当我尝试以相同的方式将多个“时间码”值作为目标并更新“斑点”列时:

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只执行其中一行代码并应用于dataframe,而不是应用所有三行代码来创建和更新'SPOTTED'列。你知道吗

我试图最终将数据帧导出到一个CSV文件,一旦我完成并能够得到这个下来。你知道吗

如果有任何帮助/见解,我将不胜感激,因为我仍在学习python和pandas的工作方法。你知道吗

谢谢你!并为任何错误的解释道歉。你知道吗


Tags: 数据no代码pandasdfdatetimenp
1条回答
网友
1楼 · 发布于 2024-06-16 11:40:32

您共享的分配多个值的代码不起作用的原因是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'

这就是数据帧之后的样子:

   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则保持不变,等待您对可能的值及其用法的说明。你知道吗

相关问题 更多 >