用于对多(两)列执行操作的Applymap接口

2024-06-16 11:23:43 发布

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

假设我有一个数据帧:

df = pd.DataFrame({'DATE_1':['2010-11-06', '2010-10-07', '2010-09-07', '2010-05-07'],
                       'DATE_2':['2010-12-07', '2010-11-06', '2010-10-07', '2010-08-06']})
df['DATE_1'] = pd.to_datetime(df['DATE_1'])
df['DATE_2'] = pd.to_datetime(df['DATE_2'])

所以看起来像:

      DATE_1      DATE_2
0   2010-11-06  2010-12-07
1   2010-10-07  2010-11-06
2   2010-09-07  2010-10-07
3   2010-05-07  2010-08-06

我想创建另一列DIFF,它是DATE_2DATE_1在天、月或年中的差异。
我想有一个像这样的界面,在这些词下面,因为我必须创建很多列,类似于很多列中的DIFF

def date_diffrence(x, y, parameter):
    if !np.isnan(x):
         return (x-y)
df['DIFF'] = df.apply(date_diffrence(df['DATE_2'], df['DATE_1']))

根据这篇文章:Difference between map, applymap and apply methods in Pandas,在我看来,我无法创建这样一个通用接口。我说得对吗?你知道吗


Tags: to数据dataframedfdatetimedate界面parameter
1条回答
网友
1楼 · 发布于 2024-06-16 11:23:43

似乎您需要不带apply的函数和Series(列df)作为参数和^{}

def date_diffrence_days(x, y):
    return (x-y).dt.days

df['DIFF'] = date_diffrence_days(df['DATE_2'], df['DATE_1'])
print (df)
      DATE_1     DATE_2  DIFF
0 2010-11-06 2010-12-07    31
1 2010-10-07 2010-11-06    30
2 2010-09-07 2010-10-07    30
3 2010-05-07 2010-08-06    91

与以下内容相同:

df['DIFF'] = (df['DATE_2'] - df['DATE_1']).dt.days
print (df)
      DATE_1     DATE_2  DIFF
0 2010-11-06 2010-12-07    31
1 2010-10-07 2010-11-06    30
2 2010-09-07 2010-10-07    30
3 2010-05-07 2010-08-06    91

编辑:

def date_diffrence_days(x, y, parameter):
    if parameter == 'm':
        return (x-y).dt.days
    elif parameter == 's':
        return (x-y).dt.total_seconds()

df['DIFF'] = date_diffrence_days(df['DATE_2'], df['DATE_1'], 's')
print (df)
      DATE_1     DATE_2       DIFF
0 2010-11-06 2010-12-07  2678400.0
1 2010-10-07 2010-11-06  2592000.0
2 2010-09-07 2010-10-07  2592000.0
3 2010-05-07 2010-08-06  7862400.0

相关问题 更多 >