Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:在多索引数据帧中折叠行_Python_Python 3.x_Pandas_Dataframe_Multi Index - Fatal编程技术网

Python 熊猫:在多索引数据帧中折叠行

Python 熊猫:在多索引数据帧中折叠行,python,python-3.x,pandas,dataframe,multi-index,Python,Python 3.x,Pandas,Dataframe,Multi Index,以下是我的df: df = pd.DataFrame({'A': [1, 1, 1, 2], 'B': [2, 2, 2, 3], 'C': [3, 3, 3, 4], 'D': ['Cancer A', 'Cancer B', 'Cancer A', 'Cancer B'], 'E': ['Eco

以下是我的df:

df = pd.DataFrame({'A': [1, 1, 1, 2],
                         'B': [2, 2, 2, 3],
                         'C': [3, 3, 3, 4],
                         'D': ['Cancer A', 'Cancer B', 'Cancer A', 'Cancer B'],
                         'E': ['Ecog 9', 'Ecog 1', 'Ecog 0', 'Ecog 1'],
                         'F': ['val 6', 'val 1', 'val 0', 'val 1'],
                         'measure_m': [100, 200, 500, 300]})

print(df)

   A  B  C         D       E      F  measure_m
0  1  2  3  Cancer A  Ecog 9  val 6        100
1  1  2  3  Cancer B  Ecog 1  val 1        200
2  1  2  3  Cancer A  Ecog 0  val 0        500
3  2  3  4  Cancer B  Ecog 1  val 1        300
当我
pivot
这个df没有通过索引时,我得到:

In [1280]: df.pivot(index=None, columns = ['A', 'B', 'C', 'D', 'E', 'F'])
Out[1280]: 
  measure_m                           
A         1                          2
B         2                          3
C         3                          4
D  Cancer A Cancer B Cancer A Cancer B
E    Ecog 9   Ecog 1   Ecog 0   Ecog 1
F     val 6    val 1    val 0    val 1
0     100.0      NaN      NaN      NaN
1       NaN    200.0      NaN      NaN
2       NaN      NaN    500.0      NaN
3       NaN      NaN      NaN    300.0
我想要的不是
4行
而是
1
一行,包含
measure\m
列的所有值,如下所示:

  measure_m                           
A         1                          2
B         2                          3
C         3                          4
D  Cancer A Cancer B Cancer A Cancer B
E    Ecog 9   Ecog 1   Ecog 0   Ecog 1
F     val 6    val 1    val 0    val 1
0     100.0    200.0    500.0    300.0
怎么做?

你的意思是:

df.set_index(list(df.columns[:-1])).T
输出:

A                1                          2
B                2                          3
C                3                          4
D         Cancer A Cancer B Cancer A Cancer B
E           Ecog 9   Ecog 1   Ecog 0   Ecog 1
F            val 6    val 1    val 0    val 1
measure_m      100      200      500      300
  measure_m                           
A         1                          2
B         2                          3
C         3                          4
D  Cancer A Cancer B Cancer A Cancer B
E    Ecog 9   Ecog 1   Ecog 0   Ecog 1
F     val 6    val 1    val 0    val 1
0       100      200      500      300

更新稍作修改以匹配您的输出:

cols = ['A', 'B', 'C', 'D', 'E', 'F']

(df.set_index(cols)
   [['measure_m']] # only need this if you have more columns
   .unstack(level=cols)
   .to_frame().T
)
输出:

A                1                          2
B                2                          3
C                3                          4
D         Cancer A Cancer B Cancer A Cancer B
E           Ecog 9   Ecog 1   Ecog 0   Ecog 1
F            val 6    val 1    val 0    val 1
measure_m      100      200      500      300
  measure_m                           
A         1                          2
B         2                          3
C         3                          4
D  Cancer A Cancer B Cancer A Cancer B
E    Ecog 9   Ecog 1   Ecog 0   Ecog 1
F     val 6    val 1    val 0    val 1
0       100      200      500      300

这里唯一的一点是,
T
在处理大型数据帧时成本有点高。还有什么可以做的吗?
T
除了复制数据外,成本并没有那么高。例如,它比
pivot
unstack
,甚至
set\u index
的成本要低得多。如果不需要水平格式,可以删除
T
。除此之外,我不确定是否有更好的方法。好的,这是有意义的。谢谢。您的第二个解决方案失败了,错误:
ValueError:Length mismatch:Expected axis有4个元素,新的值有2个元素
。不确定为什么,它当前可以处理示例数据和
cols=['A',B',C',D',E',F']
。此格式的目的是什么?你需要它做模型还是做演示?只是好奇是的,我需要把这个发送到用户界面。