如何用数据框制作数据透视表?

时间:2019-01-07 06:28:59

标签: python pandas pivot-table

我有一个看起来像这样的数据框:

>>> df = pd.DataFrame( {'level01': [10, 20, 20, 30, 40, 50, 60], 'level02': [110, 210, 150, 310, 410, 510, 610], 'value01': [1, 0, 0, 2, 0, 0, 3], 'value02': [0, 3, 0, 1, 0, 0, 1]} )

>>> df
   level01  level02  value01  value02
0       10      110        1        0
1       20      210        0        3
2       20      150        0        0
3       30      310        2        1
4       40      410        0        0
5       50      510        0        0
6       60      610        3        1

每个值列对应于其级别列。例如,df['value01'][0]为1,表示级别df['level01'][0]的值为10。(级别10的值为1)

我想提取级别为 0 的每个值行,并创建数据透视表。因此,结果将是:

   level, value
0     20      2
1     40      1
2     50      1
3    110      1
4    150      1
5    410      1
6    510      1

我尝试了df.pivot_table( values=df[['value01', 'value02']], index=df[['level01', 'level02']], aggfunc='count'),但结果与我的想法完全不同。

                value01  value02
level01 level02                  
10      110            1        1
20      150            1        1
        210            1        1
30      310            1        1
40      410            1        1
50      510            1        1
60      610            1        1

如何获得所需的结果?如果能对此有所帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

在列中创建SELECT c.delivery_id, COUNT(c.carton_id) AS count_of_carton, COUNT(ds.carton_id) AS count_of_deliveries_shipped FROM carton AS c LEFT JOIN deliveries_shipped AS ds ON c.delivery_id = ds.delivery_id AND c.carton_id <> ds.carton_id GROUP BY c.delivery_id; ,通过stack进行整形,因此可以通过query仅过滤MultiIndex值,最后通过GroupBy.size过滤每组的计数:< / p>

0

如果只有s = df.columns.to_series() df.columns = pd.MultiIndex.from_arrays(list(zip(*s.str.extract('(\D+)(\d+)').values.tolist()))) df2 = (df.stack() .query('value == 0') .groupby('level') .size() .reset_index(name='value')) print (df2) level value 0 20 2 1 40 1 2 50 1 3 110 1 4 150 1 5 410 1 6 510 1 列是第一步中用numpy.ravel创建助手2的解决方案:

DataFrame