我需要哪种熊猫功能? group_by或数据透视

时间:2019-07-10 08:35:07

标签: python pandas aggregate pandas-groupby

我对Pandas还是比较陌生,我无法确定我最好使用哪种功能来获得答案。我已经看过数据透视,数据透视表,分组依据和聚合,但是我似乎无法让它满足我的要求。非常抱歉,我很抱歉!

我有这样的数据:

Original Data

创建df的代码:

import pandas as pd
df = pd.DataFrame([
    ['1', '1', 'A', 3, 7],
    ['1', '1', 'B', 2, 9],
    ['1', '1', 'C', 2, 9],
    ['1', '2', 'A', 4, 10],
    ['1', '2', 'B', 4, 0],
    ['1', '2', 'C', 9, 8],
    ['2', '1', 'A', 3, 8],
    ['2', '1', 'B', 10, 4],
    ['2', '1', 'C', 0, 1],
    ['2', '2', 'A', 1, 6],
    ['2', '2', 'B', 10, 2],
    ['2', '2', 'C', 10, 3]
], columns = ['Field1', 'Field2', 'Type', 'Price1', 'Price2'])
print(df)

我正在尝试获取这样的数据:

Pivoted Data

尽管我的最终目标是为A分配一列,为B分配一列,为C分配一列。由于A将使用Price1,而B&C将使用Price2。

我不想一定要获得价格的最大值或最小值或平均值或总和,因为从理论上讲(尽管不太可能),对于相同的字段和类型可能会有两个不同的Price1。

在Pandas中使用什么功能可以最好地满足我的需求?

2 个答案:

答案 0 :(得分:1)

使用pivot_table

pd.pivot_table(df, values =['Price1', 'Price2'], index=['Field1','Field2'],columns='Type').reset_index()

答案 1 :(得分:1)

使用DataFrame.set_indexDataFrame.unstack进行整形-输出在列中为MultiIndex,因此添加了按DataFrame.sort_index排序第二级,展平值并从{{1 }}级:

Field

也可以使用DataFrame.pivot_table解决方案,但是它会使用默认的df1 = (df.set_index(['Field1','Field2', 'Type']) .unstack(fill_value=0) .sort_index(axis=1, level=1)) df1.columns = [f'{b}-{a}' for a, b in df1.columns] df1 = df1.reset_index() print (df1) Field1 Field2 A-Price1 A-Price2 B-Price1 B-Price2 C-Price1 C-Price2 0 1 1 3 7 2 9 2 9 1 1 2 4 10 4 0 9 8 2 2 1 3 8 10 4 0 1 3 2 2 1 6 10 2 10 3 函数将值重复的前三列进行汇总:

mean