Python 使用df.iterrows()方法访问一组行:

Python 使用df.iterrows()方法访问一组行:,python,pandas,matplotlib,Python,Pandas,Matplotlib,我使用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.

我使用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)  

您可以根据您的条件创建一个列,然后对该列执行group by并对分组的数据进行迭代

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

您能告诉我们每次迭代时
i
的值必须是多少吗?它是标量还是索引列表?“i”是行号,有助于使用df.iloc[i,1:]获取每行中的数据。因此,在循环中的每个实例上,它都是一个标量。谢谢你的帮助。我不确定我是否很好地回答了你的问题,但我希望这是有意义的。那么,你想如何使用你提到的这组索引:
[0,1]
,然后
[2,3,4,5]
,然后休息?是的,没错。我的意思是那些
[0,1]
,然后
[2,3,4,5]
不能是
i
,因为正如您所说的
i
必须是标量。那么,您想要两个级别的循环吗,一个选择这三个组中的一个,另一个从所选组的元素中选择
i
?谢谢,我尝试了上面的代码,下面是得到的结果。。SettingWithCopyWarning:试图在数据帧切片的副本上设置值。它实际上并没有对数据帧进行切片。这只是一个示例,根据您的条件创建这样的列。请注意,这只是一个警告,您应该检查df.key1Thanks的值以供输入。我有进步。但是,我无法创建绘制每个子图的图。在一组三个图中,我只绘制了其中一个图,而组中其余两个图没有数据。看起来“r”值没有传递到“r.plot”。有没有关于为什么它没有传递到所有子批次的信息?请参见上面我的原始问题中的编辑。