我需要使用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'
})
这可能吗?
谢谢。
答案 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'
});
...
再次感谢你们俩!标记为已接受。