我对Pandas还是比较陌生,我无法确定我最好使用哪种功能来获得答案。我已经看过数据透视,数据透视表,分组依据和聚合,但是我似乎无法让它满足我的要求。非常抱歉,我很抱歉!
我有这样的数据:
创建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)
我正在尝试获取这样的数据:
尽管我的最终目标是为A分配一列,为B分配一列,为C分配一列。由于A将使用Price1,而B&C将使用Price2。
我不想一定要获得价格的最大值或最小值或平均值或总和,因为从理论上讲(尽管不太可能),对于相同的字段和类型可能会有两个不同的Price1。
在Pandas中使用什么功能可以最好地满足我的需求?
答案 0 :(得分:1)
使用pivot_table
pd.pivot_table(df, values =['Price1', 'Price2'], index=['Field1','Field2'],columns='Type').reset_index()
答案 1 :(得分:1)
使用DataFrame.set_index
和DataFrame.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