python - 内部的 Pandas DataFrame 调用在当前行上应用相同的 DataFrame 条件,性能如何?
问题描述
我有超过 50 000 行的 DFV,每行由大约 15 列组成。
我想为每一行应用函数使用:
def (val,date,rang,periode):
if periode <=10:
if rang == 0:
DATE = date
return DFV[(DFV.DATE==DATE)&(DFV.VAL==val)&(DFV.PERIODE.isin(range(1,11)))].shape[0]
else :
DATE = dateavant2(date,rang-1)
return DFV[(DFV.DATE==DATE)&(DFV.VAL==val)&(DFV.PERIODE.isin(range(1,11)))].shape[0]
然后通过以下方式在同一 DFV 数据框中创建新列:
DFV["HOMAPP"] = DFV[["VAL","DATE","PERIODE"]]\
.apply(lambda l : Howmanyapp(l["VAL"],l["DATE"],0,l["PERIODE"]),axis=1)
坏与否?
如何提高类似功能的处理速度?(偶数循环)
提前致谢。
解决方案
- 我不明白你的代码是如何工作的,
Howmanyapp
在定义中只能得到 3 个参数,在这里:.apply(lambda l : Howmanyapp(l["VAL"],l["DATE"],0,l["PERIODE"]),axis=1)
你发送 4,它应该在这里停止工作。 - 为什么要使用 if 案例?您可以尝试使用 groupby + transform-count 吗?喜欢
DFV['periode_range'] = pd.cut(DFV['PERIODE'], bins=[0,10, 16, np.inf], right=True, labels=['small', 'large', 'last'])
new_df = DFV.groupby(["VAL","DATE", 'periode_range']).count()
# here we need to merge
DFV['periode_range'] = pd.cut(DFV['PERIODE'], bins=[0,10, np.inf], right=True, labels=['small', 'large'])
DFV = DFV.merge(new_df , on=["VAL","DATE", 'periode_range'])
上面的代码可能不起作用,因为我没有测试过。您可以尝试修改它,或者您可以将一些测试数据附加到您的问题中,以便我自己测试它。
- 另外我在互联网上没有找到参考
dateavant2
,所以我不知道如何处理它,如果你能帮助我,我将使用该功能调整代码。
推荐阅读
- c# - C# 如果整数对于 Int32 来说太大,我如何存储它并用它做数学运算
- javascript - 如果未在配置文件中设置实体目录,TypeORM 无法找到实体
- c - 使用 malloc 对结构进行数据对齐
- android - 按钮 OnclickListener 中的未定义箭头 - Android Studio
- unity3d - 如何在屏幕中心显示 Unity Google AdMob 横幅
- python - 我能做些什么来阻止内核在使用 Tensorflow 的 Spyder 中死亡?
- java - 如何在 CardView 的 GridView 中显示字符串数组
- python - 如何使用 JQuery 访问 WTForm
- arrays - 单个 json 输出中的多个列表
- cassandra - 更新 cassandra 中的用户定义类型数据