Python 将公式应用于数据帧中的两行
我有一个如下所示的数据帧:Python 将公式应用于数据帧中的两行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个如下所示的数据帧: intakeNo 1 2 3 intakeDate 3/21/1978 4/28/1979 1/11/1981 intakeAmt 9.3E-04 5.1E-02 2.4E-0
intakeNo 1 2 3
intakeDate 3/21/1978 4/28/1979 1/11/1981
intakeAmt 9.3E-04 5.1E-02 2.4E-04
intakeSD 2.2E-02 7.7E-01 5.8E-03
incident F F F
intakeDate 3/19/1978 5/6/1979 1/3/1981
intakeAmt 3.2E-02 1.9E-02 4.7E-03
intakeSD 9.6E-01 5.3E-01 1.4E-01
我可以通过
df.loc['intakeAmt_avg'] = df.loc['intakeAmt'].mean()
但是,我想应用以下函数来获得数据帧中的intakeDates的平均值,并添加一个名为intakeDate_avg的行:
def average_of_two_dates(datestr1, datestr2):
a = dt.datetime.strptime(datestr1, '%m/%d/%Y')
b = dt.datetime.strptime(datestr2, '%m/%d/%Y')
ave = a+(b-a)/2
return dt.datetime.strftime(ave, "%m/%d/%Y")
首先,我尝试将df的“intakeDate”部分转换为:
a = df['intakeDate']
b = a.T
这给了我以下数据帧b:
intakeNo intakeDate intakeDate
1 3/21/1978 3/19/1978
2 4/28/1979 5/6/1979
3 1/11/1981 1/3/1981
现在,我需要添加一个名为intakeDate_avg的列,它将两个日期的平均值函数应用于两个intakeDate列中的值
原始的转置df如下所示:
intakeNo intakeDate intakeAmt intakeSD incident intakeDate intakeAmt intakeSD
1 3/21/1978 9.30E-04 2.20E-02 F 3/19/1978 3.20E-02 9.60E-01
2 4/28/1979 5.10E-02 7.70E-01 F 5/6/1979 1.90E-02 5.30E-01
3 1/11/1981 2.40E-04 5.80E-03 F 1/3/1981 4.70E-03 1.40E-01
如果将函数更改为使用单个列表输入,则在此情况下可以使用
apply
:
df.loc['intakeDate_avg'] = df.loc['intakeDate'].apply(average_of_two_dates)
根据我之前回答的问题,在进行任何有意义的分析之前,您应该(事实上,我认为必须)转换数据帧。如果您使用转置数据帧进行更新,我将对此进行研究[请参阅前一个问题中的说明]。您的平均值可能适用于两个日期(或通常的值),但不适用于10个值,例如,10个值:在这种情况下,哪个值是a,哪个值是b?@jpp,我修改了我的问题,其中包括转置数据帧。谢谢。@DPdl,你能把输入的数据也转置一下吗?因为这就是我们将要开始的内容。@jpp,完成。谢谢