CSV fi的多索引

2024-09-29 19:35:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的文件:

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

通过将输入读入数据帧,可以得到以下输出:

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

现在,我想根据多重索引中的第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

Tags: 文件csv数据infromdataframedfunited
2条回答

只需使用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]

我不太明白你想要什么。如果你想在第三列有一个多索引,你已经有了,不是吗?列3当前是一个多索引。 您是否希望列0和1也是多索引的?你知道吗

相关问题 更多 >

    热门问题