2014-03-01 211 views
1

我有2個熊貓數據幀dfdf_min。我將一些過濾器應用於df,這會產生一行數據,並且我想將該行附加到df_min。我嘗試使用循環遍歷df,並嘗試使用loc將該行追加到df_min。我一直得到Incompatible indexer with DataFrame ValueError的行,我使用loc。我想我沒有正確使用loc。什麼是最好的方式來完成我想要做的事情?熊貓追加過濾行到另一個數據幀

i = 0 
for elem in vehicles: 
    for state in limit_states: 
     a = df[(df.VEHICLE == elem) & (df.LIMIT_STATE == state)] 
     df_min.loc[i] = a[(a.RF == np.min(a.RF))].head(1) #results in a single row 
     i = i + 1 

編輯:我也試過以下,而不是loc,但得到了同樣的錯誤:

df_min.ix[i] = a[(a.RF == np.min(a.RF))].head(1) 

編輯2:試過以下,患上了「第一個參數必須是一個列表類似的熊貓對象,這次你傳遞了一個類型爲「DataFrame」的對象。

for elem in vehicles: 
    for state in limit_states: 
     a = df[(df.VEHICLE == elem) & (df.LIMIT_STATE == state)] 
     df_min = pd.concat(a[(a.RF == np.min(a.RF))].head(1)) 

回答

1

大概就像這將是有益的:

df_min = pd.concat([ df[(df.VEHICLE == elem) & (df.LIMIT_STATE == state)] 
        for elem in vehicles for state in limit_states ]) 

編輯:根據名單vehicles

xs = [ df[(df.VEHICLE == elem) & (df.LIMIT_STATE == state)] 
        for elem in vehicles for state in limit_states ] 
df_min = pd.concat([ a[(a.RF == np.min(a.RF))].head(1) for a in xs ]) 

limit_states你大概也能達到什麼你正在嘗試做的使用groupby;例如:

fn = lambda a: a[(a.RF == np.min(a.RF))].head(1) 
df.groupby(['VEHICLE', 'LIMIT_STATE']).apply(fn) 
+0

謝謝!我將如何實現'a [(a.RF == np.min(a.RF))]。head(1)'行到這個結構中?它做了第二次過濾。 – marillion

+0

@marillion查看 –

+1

以上的編輯遺憾忘記標記爲接受的答案,再次感謝! – marillion