我有以下数据框:
df =
c f V E
0 M 5 32 22
1 M 7 45 40
2 R 7 42 36
3 R 9 41 38
4 R 3 28 24
我想要这样的结果,其中列'f'的值是我的新列,而我的新索引是列'c'和数据帧中其余列的组合(顺序行无关紧要):
df_result =
3 5 7 9
V(M) NaN 32 45 NaN
E(M) NaN 22 40 NaN
V(R) 28 NaN 42 41
E(R) 24 NaN 36 38
当前,我的代码是:
df_result = pd.concat([df.pivot('c','f',col).rename(index = {e: col + '(' + e + ')' for e in df.pivot('c','f',col).index}) for col in [e for e in df.columns if e not in ['c','f']]])
有了该代码,我得到:
df_result =
f 3 5 7 9
c
E(M) NaN 22 40 NaN
E(R) 24 NaN 36 38
V(M) NaN 32 45 NaN
V(R) 28 NaN 42 41
我认为这是一个有效的结果,但是,我不知道是否有一种方法可以准确地获得我的期望结果,或者至少有一种更好的方法来获得我已经得到的结果。
非常感谢您。
答案 0 :(得分:3)
要获取表格,请输入.melt
+ .pivot_table
df_result = df.melt(['f', 'c']).pivot_table(index=['variable', 'c'], columns='f')
然后我们可以清理命名:
df_result = df_result.rename_axis([None, None], 1)
df_result.columns = [y for _,y in df_result.columns]
df_result.index = [f'{x}({y})' for x,y in df_result.index]
# Python 2.: ['{0}({1})'.format(*x) for x in df_result.index]
3 5 7 9
E(M) NaN 22.0 40.0 NaN
E(R) 24.0 NaN 36.0 38.0
V(M) NaN 32.0 45.0 NaN
V(R) 28.0 NaN 42.0 41.0
您可能会考虑保留MultiIndex而不是将其展平为新的字符串,因为对于某些聚合而言,它可能更简单。
答案 1 :(得分:2)
使用...
List<OrderSpecifier<?>> orders = Collections.singletonList(((ComparableExpressionBase<?>)(QTask.task.reviewers.<SOMETHING>)).asc());
...
pivot_table