2017-06-12 6 views
0

df.iterrows()を使用してデータフレームをループしています。すべての行をループする代わりに、毎回アクセスする行の数を設定したいと思います。まず、最初の2行にアクセスしたい場合は、3行目から6行目、残りの行になります。行をループする方法はありますか?ここで設定された行数にアクセスするためのPandas 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

これは単なる例で、条件に基づいてそのような列を作成します。 Plsはそれが警告だけであることに注意してください。df.key1の値を確認してください – user3256363

+0

あなたの入力をありがとう。私は進歩があります。しかし、各サブプロットがプロットされているプロットを作成することはできません。セット内の3つのグループでは、グループ内の残りの2つのプロットのデータがない場合、プロットの1つだけがプロットされます。 'r'値が 'r.plot'に渡されないように見えます。すべてのサブプロットに渡されない理由についての入力はありますか?上記のオリジナルの質問の編集をご覧ください。 –

関連する問題