熊猫如何旋转而不会丢失数据

时间:2020-07-31 18:37:22

标签: python pandas dataframe pivot

我正在尝试使用Pandas评估Power Query / M,以进行一些可重复的转换。到目前为止还算不错,但是我在Pandas中遇到以下情况时遇到了麻烦,并且非常感谢您指出我做错了什么。

我有一个看起来像这样的DataFrame:

    sales rep   quarter result  value
0   adam        q1      target  3000
1   ben         q1      target  3200
2   cal         q1      target  2900
3   dan         q1      target  3400
4   adam        q1      actual  2900
5   ben         q1      actual  2100
6   cal         q1      actual  2100
7   dan         q1      actual  3500
8   adam        q2      target  4000
9   ben         q2      target  3200
10  cal         q2      target  7200
11  dan         q2      target  5200
12  adam        q2      actual  3400
13  ben         q2      actual  3900
14  cal         q2      actual  9000
15  dan         q2      actual  6000
16  adam        q3      target  4000
17  ben         q3      target  4000
18  cal         q3      target  7200
19  dan         q3      target  6400
20  adam        q3      actual  4500
21  ben         q3      actual  4000
22  cal         q3      actual  6500
23  dan         q3      actual  6500
24  adam        q4      target  5200
25  ben         q4      target  4300
26  cal         q4      target  7000
27  dan         q4      target  6500
28  adam        q4      actual  5100
29  ben         q4      actual  4300
30  cal         q4      actual  6900
31  dan         q4      actual  7200

我正在尝试使用“值”列作为值来对“结果”列上的数据进行透视。我需要保留“销售代表”和“季度”列。从本质上讲,我试图达到(默认情况下,我在Power Query中的unpivot操作上得到)是:

sales rep   quarter target  actual
adam        q1      3000    2900
adam        q2      4000    3400
adam        q3      4000    4500
adam        q4      5200    5100
ben         q1      3200    2100
ben         q2      3200    3900
ben         q3      4000    4000
ben         q4      4300    4300
cal         q1      2900    2100
cal         q2      7200    9000
cal         q3      7200    6500
cal         q4      7000    6900
dan         q1      3400    3500
dan         q2      5200    6000
dan         q3      6400    6500
dan         q4      6500    7200

在Pandas中使用ivot_table方法,我得到: enter image description here

很明显,这是一个枢轴表,这使得在该表上执行任何进一步的操作变得更加困难。有什么方法可以到达熊猫吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

DataFrame.pivot()是一种专用或第二级函数,旨在将.groupby().unstack()混合为一种方法。在此示例中,Pivot和reset_index可以正常工作。

但是,.groupby()是一种更通用的方法,其主要优点是能够按除列之外的任何Indexer进行分组:

  • 不在DataFrame中的系列
  • MultiIndex的级别
  • 包含重复项的df单级索引
  • 应用于列的函数(例如df.col1> 100或np.sign(df.col1))
  • 以上任何组合
  • 基本上所有具有相同长度作为索引的DataFrame的索引器

除了这一巨大优势之外,groupby的应用和转换功能相结合的能力使几乎所有数据分析成为可能。

您可能想熟悉熊猫https://symfony.com/doc/current/components/var_dumper/advanced.html