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

3
我需要使用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 dataframe构造函数中定义所有三个字段,而不是定义一个函数来获取数据并在第二个dataframe步骤中引用它。

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个回答

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
“问题在于我希望在pandas dataframe构造函数中定义这三个字段。”
“这是不可能的。您无法从尚未创建的两个其他系列定义系列。您可以使用pd.DataFrame.assign技巧,在后续步骤中使用方法链接添加系列。但是,我认为没有比以下更好的办法:”
df['departure_date'] = df['arrival_date'] + df['days_stay']

0

@gyx-hh 和 @jpp

感谢你们两位回答我的问题。至少我现在知道了无法在数据框构造函数中完成这个操作,以及使用assign选项的替代方法。

传统的在第二步添加列的方法似乎可行,但需要进行一些微调。

sample_df['departure_date'] = sample_df['arrival_date'] + 
pd.TimedeltaIndex(sample_df['days_stay'], unit='D')

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接