我有一个看起来像这样的数据框。x1c 0d1x的数据我想计算事件日期和列中显示的月/日之间的工作天数。将NaTs转换为nans后的输出如下所示:
的有谁知道如何最好地利用Pandas来实现这一目标吗?
5jdjgkvh1#
假设日期已经是datetime类型 *,使用numpy.busday_count和广播/屏蔽:
numpy.busday_count
import numpy as np tmp = df.filter(regex=r'\d{4}-\d{2}') df[tmp.columns] = np.where(tmp.notna(), np.busday_count(df['Event_Date'].to_numpy(dtype='datetime64[D]')[:,None], tmp.fillna('0').to_numpy(dtype='datetime64[D]')), np.nan)
字符串
cols = df.drop(columns='Account').columns ; df[cols] = df[cols].apply(pd.to_datetime, dayfirst=True)
输出量:
Account Event_Date 2023-01 2023-02 2023-03 2023-04 2023-05 2023-06 2023-07 0 A 2023-04-25 -77.0 NaN NaN NaN NaN NaN NaN 1 B 2023-06-02 NaN NaN NaN 21.0 51.0 NaN NaN 2 C 2023-04-25 NaN NaN NaN NaN 7.0 NaN NaN
型使用的输入:
from pandas import Timestamp df = pd.DataFrame({'Account': ['A', 'B', 'C'], 'Event_Date': [Timestamp('2023-04-25 00:00:00'), Timestamp('2023-06-02 00:00:00'), Timestamp('2023-04-25 00:00:00')], '2023-01': [Timestamp('2023-01-06 00:00:00'), NaT, NaT], '2023-02': [NaT, NaT, NaT], '2023-03': [NaT, NaT, NaT], '2023-04': [NaT, Timestamp('2023-07-01 00:00:00'), NaT], '2023-05': [NaT, Timestamp('2023-08-12 00:00:00'), Timestamp('2023-05-04 00:00:00')], '2023-06': [NaT, NaT, NaT], '2023-07': [NaT, NaT, NaT]})
型
1条答案
按热度按时间5jdjgkvh1#
假设日期已经是datetime类型 *,使用
numpy.busday_count
和广播/屏蔽:字符串
cols = df.drop(columns='Account').columns ; df[cols] = df[cols].apply(pd.to_datetime, dayfirst=True)
。输出量:
型
使用的输入:
型