在Pandas Dataframe构造函数中的两个字段上执行计算/算术运算

时间:2018-07-17 22:26:40

标签: python pandas

我需要使用numpy和pandas模拟一些交易数据,类似于下面的代码:

import random
import numpy as np
import pandas as pd
n=1000

sample_df = pd.DataFrame({ 
'arrival_date':np.random.choice( pd.date_range('1/1/2015', periods=n, 
                      freq='D'), n),
'days_stay': [random.randint(1,14) for x in range(n)]
})

数据框需要具有3个字段,其中两个字段的计算方法与上面类似,加上另一个将两个字段的值相加的日期字段:

'departure_date': 'arrival_date' + 'days_stay'

要注意的是,我宁愿在pandas数据框构造函数中定义所有三个字段,而不必为最后一个字段定义函数,然后在第二个数据框步骤中引用它以获取数据。

sample_df = pd.DataFrame({ 
'arrival_date':np.random.choice( pd.date_range('1/1/2015', periods=n, 
                      freq='D'), n),
'days_stay': [random.randint(1,14) for x in range(n)],
'departure_date': 'arrival_date' + 'days_stay'
})

这可能吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

尝试以下方法。在pd.Dataframe()上使用assign,我们可以使用创建的df及其数据,并分配一个新列。

sample_df = pd.DataFrame({ 
'arrival_date':np.random.choice( pd.date_range('1/1/2015', periods=n, 
                      freq='D'), n),
'days_stay': [random.randint(1,14) for x in range(n)],
}).assign(departure_date = lambda x: x.arrival_date + x.days_stay.apply(lambda x: pd.Timedelta(str(x)+'D')))

样本输出:

    arrival_date   days_stay    departure_date
0   2015-02-17     3            2015-02-20
1   2015-01-18     13           2015-01-31
2   2015-02-12     6            2015-02-18
3   2015-01-15     14           2015-01-29
4   2015-03-11     5            2015-03-16

答案 1 :(得分:1)

  

要注意的是,我希望在   熊猫数据框构造器

这是不可能的。您无法从其他两个尚未定义的系列中定义一个系列。您可以使用pd.DataFrame.assign技巧在后续步骤中使用方法链接添加系列。但是,我认为没有什么比这更好的了:

df['departure_date'] = df['arrival_date'] + df['days_stay']

答案 2 :(得分:0)

@ gyx-hh和@jpp

谢谢你们回答我的问题。我至少对是否可以在dataframe构造函数中完成(它不能)有一个答案,并且还有一种使用assign选项执行此操作的替代方法。

在第二步中添加列的传统选项似乎可行,但需要进行一些调整。

...
gapi.client.request({
      'path': 'https://www.googleapis.com/drive/v3/files/' + fileId,
      'params': { 'fields': "id,name,size,parents" },
      'method': 'GET'
    });
...

再次感谢你们俩!标记为已接受。