迭代python pandas中的MultiIndex数据

时间:2014-12-03 19:19:06

标签: python csv pandas hierarchical-data

我希望能够通过对多索引进行分组来迭代pandas DataFrame。在这里,我希望能够一起处理每个行业中的一组行。我使用多索引加载。

from StringIO import StringIO
data = """industry,location,number
retail,brazil,294
technology,china,100
retail,nyc,2913
retail,paris,382
technology,us,2182
"""

df = pd.read_csv(StringIO(data), sep=",", index_col=['industry', 'location'])

所以我希望有这样的效果:

for industry, rows in df.iter_multiindex():
    for row in rows:
        process_row(row)

有这样的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以按多指数(行业)的第一级进行分组,然后通过这些组进行迭代:

In [102]: for name, group in df.groupby(level='industry'):
   .....:     print name, '\n', group, '\n'
   .....:
retail
                   number
industry location
retail   brazil       294
         nyc         2913
         paris        382

technology
                     number
industry   location
technology china        100
           us          2182

group每次都是一个数据框,然后您可以对其进行迭代(例如for row in group.iterrows()

但是,在大多数情况下不需要这样的迭代! process_row需要什么?您可以直接在groupby对象上以矢量化方式执行此操作。

答案 1 :(得分:0)

不确定你为什么要这样做,但你可以这样做:

for x in df.index:
    print x[0] # industry
    process(df.loc[x]) # row

但这不是你通常使用DataFrame的方式,你可能想了解apply()Essential Basic Functionality也非常有帮助)