【发布时间】:2016-09-16 19:00:28
【问题描述】:
我有一个大熊猫数据框。它有数千列和超过一百万行。我想逐行计算最大值和最小值之间的差异。请记住,有很多 NaN 值,有些行都是 NaN 值(但我仍然想保留它们!)。
我写了以下代码。它有效,但很耗时:
totTime = []
for index, row in date.iterrows():
myRow = row.dropna()
if len(myRow):
tt = max(myRow) - min(myRow)
else:
tt = None
totTime.append(tt)
有什么办法可以优化吗?我尝试使用以下代码,但遇到所有 NaN 行时出现错误:
tt = lambda x: max(x.dropna()) - min(x.dropna())
totTime = date.apply(tt, axis=1)
任何建议将不胜感激!
【问题讨论】:
-
IIUC 你可以做
date.max(axis=1) - data.min(axis=1) -
您应该避免使用循环和
apply,并像我建议的那样搜索矢量化方法,大多数熊猫操作会优雅地处理NaN,然后您需要在操作之前或之后过滤掉跨度>
标签: python pandas optimization dataframe