来自CSV文件的Pandas多索引

时间:2014-05-05 13:25:04

标签: python pandas

我的文件看起来像这样:

2012-09-03      vardpolitik     30      Skop    30.3    6.5     4.1     2.9     33.5    6       9.8     6.3     1203    2020    501     166
2012-09-03      vardpolitik     30      Sifo    28.7    6.6     4.8     3.8     33.3    5.9     8.9     7.2     1203    2020    501     166
2012-12-03      vardpolitik     30      Sifo    28.2    5.4     4.5     3.6     32.1    5.9     9.7     10      75      117     17      11
2012-08-20      vardpolitik     30      United Minds    27.8    5.8     3.3     4.7     33.1    6.9     8.6     8.8     264     369     91      28
2012-11-07      vardpolitik     30      YouGov  30.3    5.7     3.8     3.5     31.3    6.7     7.1     10.9    1138    1924    389     168
2012-11-27      vardpolitik     30      Demoskop        33.5    5.9     2.9     2.8     32      5.1     8.3     8.6     1700    2602    585     293
2012-10-01      vardpolitik     30      Sifo    28.8    5.6     4.4     3.4     32.1    6.5     10      7.7     1207    2044    503     162

通过读取Pandas DataFrame中的输入,您将获得以下输出:

In [22]: df = pd.DataFrame.from_csv('vardpolitik-opinion-30.csv', sep='\t', header=None, index_col=[3,0], parse_dates=True)

In [23]: df
Out[23]:
                                     1   2     4    5    6    7     8    9   \
3               0
Skop            2012-09-03  vardpolitik  30  30.3  6.5  4.1  2.9  33.5  6.0
Sifo            2012-09-03  vardpolitik  30  28.7  6.6  4.8  3.8  33.3  5.9
                2012-12-03  vardpolitik  30  28.2  5.4  4.5  3.6  32.1  5.9
United Minds    2012-08-20  vardpolitik  30  27.8  5.8  3.3  4.7  33.1  6.9
YouGov          2012-11-07  vardpolitik  30  30.3  5.7  3.8  3.5  31.3  6.7
Demoskop        2012-11-27  vardpolitik  30  33.5  5.9  2.9  2.8  32.0  5.1
Sifo            2012-10-01  vardpolitik  30  28.8  5.6  4.4  3.4  32.1  6.5

现在,我想根据MultiIndex中的第3列对所有内容进行分组。我该怎么做?

                                     1   2     4    5    6    7     8    9   \
3               0
Skop            2012-09-03  vardpolitik  30  30.3  6.5  4.1  2.9  33.5  6.0
Sifo            2012-09-03  vardpolitik  30  28.7  6.6  4.8  3.8  33.3  5.9
                2012-12-03  vardpolitik  30  28.2  5.4  4.5  3.6  32.1  5.9
                2012-10-01  vardpolitik  30  28.8  5.6  4.4  3.4  32.1  6.5
United Minds    2012-08-20  vardpolitik  30  27.8  5.8  3.3  4.7  33.1  6.9
YouGov          2012-11-07  vardpolitik  30  30.3  5.7  3.8  3.5  31.3  6.7
Demoskop        2012-11-27  vardpolitik  30  33.5  5.9  2.9  2.8  32.0  5.1

2 个答案:

答案 0 :(得分:0)

只需使用groupby方法并传递level参数:

In [17]: df.head()
Out[17]:
                                  1   2     4    5    6    7     8    9    10  \
3            0
Skop         2012-09-03  vardpolitik  30  30.3  6.5  4.1  2.9  33.5  6.0  9.8
Sifo         2012-09-03  vardpolitik  30  28.7  6.6  4.8  3.8  33.3  5.9  8.9
             2012-12-03  vardpolitik  30  28.2  5.4  4.5  3.6  32.1  5.9  9.7
United Minds 2012-08-20  vardpolitik  30  27.8  5.8  3.3  4.7  33.1  6.9  8.6
YouGov       2012-11-07  vardpolitik  30  30.3  5.7  3.8  3.5  31.3  6.7  7.1

                           11    12    13   14   15
3            0
Skop         2012-09-03   6.3  1203  2020  501  166
Sifo         2012-09-03   7.2  1203  2020  501  166
             2012-12-03  10.0    75   117   17   11
United Minds 2012-08-20   8.8   264   369   91   28
YouGov       2012-11-07  10.9  1138  1924  389  168

[5 rows x 14 columns]

In [18]: gb = df.groupby(level=0)

In [19]: gb.mean()
Out[19]:
              2        4       5       6    7     8    9       10    11  \
3
Demoskop      30  33.5000  5.9000  2.9000  2.8  32.0  5.1  8.3000   8.6
Sifo          30  28.5667  5.8667  4.5667  3.6  32.5  6.1  9.5333   8.3
Skop          30  30.3000  6.5000  4.1000  2.9  33.5  6.0  9.8000   6.3
United Minds  30  27.8000  5.8000  3.3000  4.7  33.1  6.9  8.6000   8.8
YouGov        30  30.3000  5.7000  3.8000  3.5  31.3  6.7  7.1000  10.9

                     12         13        14   15
3
Demoskop      1700.0000  2602.0000  585.0000  293
Sifo           828.3333  1393.6667  340.3333  113
Skop          1203.0000  2020.0000  501.0000  166
United Minds   264.0000   369.0000   91.0000   28
YouGov        1138.0000  1924.0000  389.0000  168

[5 rows x 13 columns]

答案 1 :(得分:0)

我不确定我明白你想拥有什么。如果您想要第3列的多索引,那么您已经拥有它了吗?您的第3列目前是MultiIndex。 您是否希望列0和1也是多索引?