簡體   English   中英

如何提高子集 pandas dataframe 的計算速度?

[英]How to improve the computation speed of subsetting a pandas dataframe?

我有一個很大的 df (14*1'000'000),我想對它進行子集化。 計算似乎花費了很多時間,這並不奇怪,我想知道如何提高速度。

我想要的是為每個Name設置Total_time的最小值,同時忽略零值,如果有多個行具有Total_time的最小值,則只選擇第一個。 然后我希望它全部附加到一個新的 dataframe unique中。

我的代碼中是否存在使其效率低下的一般錯誤?

unique = pd.DataFrame([])
i=0
for pair in df['Name'].unique():
    i=i+1
    temp =df[df["Name"]== pair]
    temp2 = temp.loc[df['Total_time']  != 0]
    lowest = temp2['Total_time'].min()
    temp3 = temp2[temp2["Total_time"] == lowest].head(1)
    unique = unique.append(temp3)
    print("finished "+ pair + " "+ str(i))

通常,您不想遍歷每個項目。

如果您想要時間最短的名稱:

new_df = df[df["Total_time"] != 0].copy() # you seem to be throwing away 0
out = new_df.groupby("Name")["Total_time"].min()

如果需要rest的列:

new_df.loc[new_df.groupby("Name")["total_time"].idxmin()] 

我想要的是為每個Name設置Total_time的最小值,同時忽略零值,如果有多個行具有Total_time的最小值,則只選擇第一個。

這聽起來像是pandas.Series.idxmin的任務,請考慮以下簡單示例

import pandas as pd
df = pd.DataFrame({"X":["A","B","C","D","E"],"Y":[5.5,0.0,5.5,1.5,1.5]})
first_min = df.Y.replace(0,float("nan")).idxmin()
print(df.iloc[first_min])

output

X      D
Y    1.5
Name: 3, dtype: object

說明:將 0 替換為 NaN 以便不考慮它們,然后使用 idxmin 獲取第一個最小值的索引,這可能與.iloc一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM