【发布时间】:2021-07-20 23:10:42
【问题描述】:
我有一个充满列表的数据框。我想从每个中提取最小值和最大值,并将它们放在指定值以下。我编写了一个函数,其中第一部分使用 numpy 函数完成,后面部分使用数据帧计算。我想知道这是(数据框方法)最好的方法吗?我也可以使用 numpy 执行第二部分吗?在下面的示例中,我首先删除负值。
我的代码:
df = pd.DataFrame({'x':[[-1,0,1,2,10],[1.5,2,4,5]],'y':[[2.5,2.4,2.3,1.5,0.1],[5,4.5,3,-0.1]]})
def drop_bad_data(df):
x@ymax_list,yatxmax_list = [],[]
for row in df[['x','y']].to_numpy():
itm = np.array([*row])
### Drop negative values
itm = itm[;,(a>0).all(axis=0)]
### find max index
idx = itm.argmax(1) # idx = [xmax_index,ymax_index]
### find x@ymax, y@xmax and append to list
y@xmax,x@ymax = itm[[1,0],idx]
### append
x@ymax_list.append(x@ymax)
y@xmax_list.append(y@xmax)
auxdf = pd.DataFrame({'x@ymax':x@ymax_list,'y@xmax':y@xmax_list})
auxdf['Bad_list'] = (auxdf['x@ymax']<1)&(auxdf['y@xmax']<2)
df = df[auxdf['Bad_list']]
return df
我猜使用 numpy 做第二部分(如下转载)会减少处理时间?
### append
x@ymax_list.append(x@ymax)
y@xmax_list.append(y@xmax)
auxdf = pd.DataFrame({'x@ymax':x@ymax_list,'y@xmax':y@xmax_list})
auxdf['Bad_list'] = (auxdf['x@ymax']<1)&(auxdf['y@xmax']<2)
【问题讨论】:
标签: python pandas dataframe numpy