使用else if逻辑将条件列添加到Pandas Data Frame-Python

亚伯拉罕

需要一些帮助...

以下是我的数据框

+--------------+----------------+---------------+-----------------+------------+
| Planned_Date | Planned_Date_2 | Complete_Date | Complete_Date_2 | Alias_Date |
+--------------+----------------+---------------+-----------------+------------+
| 01/01/1800   |                | 03/09/2020    |                 | 03/09/2020 |
| 01/01/1800   | 20/09/2020     |               |                 | 20/09/2020 |
|              |                |               | 28/09/2020      | 28/09/2020 |
| 04/10/2020   |                |               |                 | 04/10/2020 |
+--------------+----------------+---------------+-----------------+------------+

我正在尝试使用针对一些日期列的条件逻辑创建新列Alias_Date):

逻辑如下:

if Planned_Date = 01/01/1800
  and Planned_Date_2 = null
    then Complete_Date

else if Planned_Date  = 01/01/1800
  and Planned_Date_2  <> null
    then Planned_Date_2 

else if Planned_Date = null
    then Complete_Date_2

else Planned_Date

我如何使用python / pandas / numpy或任何其他推荐的方式有效地做到这一点。

耶斯列尔

使用前向填充缺失值,并按位置选择最后一列DataFrame.iloc

df['Alias_Date'] = df.ffill(axis=1).iloc[:, -1]

如果可能,DataFrame中的其他一些列将通过列表进行选择:

cols = ['Planned_Date', 'Planned_Date_2', 'Complete_Date', 'Complete_Date_2']


df['Alias_Date'] = df[cols].ffill(axis=1).iloc[:, -1]

或前4列:

df['Alias_Date'] = df.iloc[:, :4].ffill(axis=1).iloc[:, -1]

或列Date

df['Alias_Date'] = df.filter(like='Date').ffill(axis=1).iloc[:, -1]

编辑:

选择列中的解决方案numpy.select

cols = ['Planned_Date', 'Planned_Date_2', 'Complete_Date', 'Complete_Date_2']

df[cols] = df[cols].apply(pd.to_datetime, dayfirst=True)

m1 = df['Planned_Date'].eq('1800-01-01')
m2 = df['Planned_Date_2'].isna()
m3 = df['Planned_Date'].isna()

df['Alias_Date'] = np.select([m1 & m2, m1 & ~m2, m3], 
                             [df['Complete_Date'], 
                              df['Planned_Date_2'], 
                              df['Complete_Date_2']], default=df['Planned_Date'])
print (df)
  Planned_Date Planned_Date_2 Complete_Date Complete_Date_2 Alias_Date
0   1800-01-01            NaT    2020-09-03             NaT 2020-09-03
1   1800-01-01     2020-09-20           NaT             NaT 2020-09-20
2          NaT            NaT           NaT      2020-09-28 2020-09-28
3   2020-10-04            NaT           NaT             NaT 2020-10-04

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将X列数添加到data.frame

将行添加到data.frame中,但仅添加到某些列中

如何使用 Pandas Data Frame 在 python 3 中使用断言?

将 data.frame 中的值添加到匹配两个条件的另一个 data.frame 中的新列

将动态子集条件作为变量添加到data.frame

使用相同的列索引将数组列表作为列追加到pandas Data Frame

R将列添加到data.frame中,即data.frames列表中

如何使用 terra 包将栅格堆栈中提取的值添加到 Spatial 对象的 data.frame 中?

有什么办法可以使用闪亮的操作按钮将行递归地添加到data.frame中?

如何一次性将多个列添加到data.frame中?

在R函数中自动将列添加到data.frame

将文件名作为列添加到循环内的data.frame中

通过R中的循环将新列添加到data.frame

R:将列添加到 data.frame 以分为低、中、高范围

将矢量作为列添加到fill = NA的data.frame中

将行和列添加到 R 中的 data.frame

如何使用 Python 中的修改函数更改 Pandas Data Frame 中列的值?

Python Pandas使用地图将多个列添加到数据框

使用 Pandas python 将 vlookup 公式添加到列中,而无需遍历行

将列添加到包含跨行复杂逻辑的Python pandas数据框

使用python将列添加到.CSV文件

使用Python将列添加到CSV

python pandas data-frame-根据列值重复行

如何识别 Python Pandas Data Frame 列中值的顺序?

在 Python Pandas 中创建的函数中使用 .format() 从 Data Frame 中选择值时出错?

使用R中的条件减去data.frame中的列

将for循环的输出添加到data.frame中,以便我可以在R中使用ggplot2对其进行图形处理

使用 R 从另一个 data.table 中使用条件查找将新列添加到 data.table

使用 data.table 将 data.frame 与 NA 聚合