【发布时间】:2016-07-12 17:32:51
【问题描述】:
对于我从数据框开始的分析,看起来像这样(但要大得多):
ID1 ID2 type Number
0 IE345 E90 I 38
1 IE345 E92 E 26
2 IE345 E93 E 21
3 IE345 E95 R 9
4 IE346 E94 I 41
7 IE346 BLK E 1
我想取消透视以下数据框:
Df1 = pd.pivot_table(loads, values=['Number'], index = ['ID1', 'ID2'], columns=['Type'], margins=True, aggfunc=[sum] , fill_value=0)
Df1:
sum
Number
type B D E I L R All
ID1 ID2
IE345 E90 0 0 0 38 0 0 38
E92 0 0 26 0 0 0 26
E93 0 0 21 0 0 0 21
E95 0 0 0 0 0 9 9
IE346 E94 0 0 0 41 0 0 41
BLK 0 0 1 0 0 0 1
进入:
Df1:
ID1 ID2 B D E I L R All
IE345 E90 0 0 0 38 0 0 38
IE345 E92 0 0 26 0 0 0 26
IE345 E93 0 0 21 0 0 0 21
IE345 E95 0 0 0 0 0 9 9
IE346 E94 0 0 0 41 0 0 41
IE346 BLK 0 0 1 0 0 0 1
看来 pandas.melt 是我正在寻找的,但无法使其工作。
之后我想添加一行最高值的列名,但当然没有边距:
ID1 ID2 B D E I L R All Max
IE345 E90 0 0 0 38 0 0 38 I
IE345 E92 0 0 26 0 0 0 26 E
IE345 E93 0 0 21 0 6 0 27 E
IE345 E95 0 0 0 0 0 9 9 R
IE345 E94 0 0 0 41 0 0 41 I
IE345 BLK 0 0 1 0 1 0 2 E
对于最大值,我使用了:
df['Max'] = df.idxmax(axis=1, skipna=True)
但不幸的是,这需要全部。关于如何以最有效的方式实现目标的任何想法?
!!!编辑!!!!
对于第一部分,我构建了一个解决方案,它返回精确的非透视数据透视表!代码见这里:
df.columns = df.columns.get_level_values('Type')
df.reset_index(inplace=True)
现在我尝试了 Vmg 的 Max 值的解决方案,但不幸的是它返回了:
ValueError: could not convert string to float:
关于如何解决这个问题的任何想法?
【问题讨论】:
标签: python pandas pivot unpivot melt