Python 如何在多个列上同时使用apply函数
是否可以在pandas中的多个列上调用apply函数,如果可以,如何执行此操作。。比如说,Python 如何在多个列上同时使用apply函数,python,pandas,apply,duration,timedelta,Python,Pandas,Apply,Duration,Timedelta,是否可以在pandas中的多个列上调用apply函数,如果可以,如何执行此操作。。比如说, df['Duration'] = df['Hours', 'Mins', 'Secs'].apply(lambda x,y,z: timedelta(hours=x, minutes=y, seconds=z)) 谢谢。使用在数据帧上应用轴=1 三角形=[{'base':20,'height':9},{'base':10,'height':7},{'base':40,'height':4}] tr
df['Duration'] = df['Hours', 'Mins', 'Secs'].apply(lambda x,y,z: timedelta(hours=x, minutes=y, seconds=z))
谢谢。使用
在数据帧上应用轴=1
三角形=[{'base':20,'height':9},{'base':10,'height':7},{'base':40,'height':4}]
triangles\u df=pd.DataFrame(三角形)
def计算_面积(行):
返回行['base']*行['height']*0.5
三角形应用(计算面积,轴=1)
祝你好运 这可能会有帮助
import pandas as pd
import datetime as DT
df = pd.DataFrame({"Hours": [1], "Mins": [2], "Secs": [10]})
df = df.astype(int)
df['Duration'] = df[['Hours', 'Mins', 'Secs']].apply(lambda x: DT.timedelta(hours=x[0], minutes=x[1], seconds=x[2]), axis=1)
print(df)
print(df["Duration"])
输出:
Hours Mins Secs Duration
0 1 2 10 01:02:10
0 01:02:10
dtype: timedelta64[ns]
您应该使用:
df['Duration'] = pd.to_timedelta(df.Hours*3600 + df.Mins*60 + df.Secs, unit='s')
当您对数据帧
和axis=1
使用apply时,这是一个行计算,因此通常这种语法是有意义的:
df['Duration'] = df.apply(lambda row: pd.Timedelta(hours=row.Hours, minutes=row.Mins,
seconds=row.Secs), axis=1)
一些时间安排
import pandas as pd
import numpy as np
df = pd.DataFrame({'Hours': np.tile([1,2,3,4],50),
'Mins': np.tile([10,20,30,40],50),
'Secs': np.tile([11,21,31,41],50)})
%timeit pd.to_timedelta(df.Hours*3600 + df.Mins*60 + df.Secs, unit='s')
#432 µs ± 5.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit df.apply(lambda row: pd.Timedelta(hours=row.Hours, minutes=row.Mins, seconds=row.Secs), axis=1)
#12 ms ± 67.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
像往常一样,应用应该是最后的手段。这当然很有帮助,但我遇到了以下错误:(“索引超出范围”,“发生在索引0”)嗨,我尝试了您的解决方案,但一直遇到此错误:()出现意外的关键字参数“axis”@空白您需要确保实际使用的是数据帧上的apply
,而不是系列上的Series.apply()
没有轴参数,这很可能是导致该错误的原因,但请不要在此处使用apply方法。对于较大的数据帧来说速度非常慢。好的,那么第一行代码是您的主要建议吗?还有,你为什么要乘以3600?cus当我使用第一行时,我得到以下错误:int太大,无法转换在我看来,您有一个DataFrame
,有3列Hours
、Mins
和Secs
,它们都是整数。我以秒为单位计算总时间,然后使用pd.to_timedelta以秒为单位。但这似乎不是你所拥有的。你应该用print(df)发布你的数据,这样我们才能真正帮助你。