2017-06-12 104 views
0

我正在循環使用df.iterrows()數據框。我想設置每次訪問的行數,而不是循環遍歷所有行。首先我想訪問前兩行,然後是第三行到第六行,然後是剩下的行。有沒有辦法循環行?熊貓df.iterrows()方法來訪問一定數量的行:

以下是我有:

import pandas as pd 
import numpy as np 
df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD')) 

df['key1'] = 0 
df.key1.iloc[0:3] = 1 
df.key1.iloc[3:7] = 2 
df.key1.iloc[7:] = 3 

df_grouped = df.groupby('key1') 

for group_name, group_value in df_grouped: 
    fig, axes = plt.subplots(rows, 1, sharex=True, sharey=True, figsize= (15, 20)) 
    for i,r in group_value.iterrows(): 
     rows, columns = group_value.shape 
     r = r[0:columns-1] 
     r.plot(kind='bar', fill=False, log=False) 
+0

你能告訴我們在每次迭代中必須有'i'的值嗎?它會是一個標量還是一系列索引? – Divakar

+0

'i'是行號,並幫助使用df.iloc [I,1:]獲取每行中的數據。因此,在循環中的每個實例都將是一個標量。謝謝你的幫助。不知道我是否已經很好地回答了你的問題,但我希望這是有道理的。 –

+0

那麼,你如何使用這些索引組:[0,1],然後是[2,3,4,5],然後休息? – Divakar

回答

1

你可以根據你的病情創建一列,然後通過在該列做一組,遍歷分組的數據。

df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD')) 

df['key1'] = 0 
df.key1.iloc[1:3] = 1 
df.key1.iloc[3:7] = 2 
df.key1.iloc[7:] = 3 

df_grouped = df.groupby('key1') 

for group_name, group_value in df_grouped: 
    for i,r in group_value.iterrows(): 
     print i, max(r[:-1]) 
    print '-' * 80 
+0

謝謝,我試了上面的代碼,這裏是得到.. SettingWithCopyWarning: 值試圖設置在一個從DataFrame的切片的副本。它不會實際切分數據幀。 –

+0

這只是一個例子,根據你的情況創建一個這樣的列。請注意這只是一個警告,你應該檢查df.key1 – user3256363

+0

的值感謝您的意見。我有進步。但是,我無法創建繪製每個子圖的情節。在一組三個小組中,我只有一個小區繪製在沒有其餘兩個小區的數據的情況下。它看起來像'r'值不會傳遞給'r.plot'。關於爲什麼它不傳遞給所有子圖的任何輸入?請參閱上面我原來的問題中的編輯。 –