我有一个Pandas Dataframe ,我需要“切换”行和列。(转置?枢轴?融化?不知道它是如何被称为):
假设我有2个引用,每个引用有4个步骤,每个步骤有3个变量
df = pd.DataFrame({'ref': ['ref1', 'ref1', 'ref1', 'ref1', 'ref2', 'ref2', 'ref2', 'ref2'],
'step': [1, 2, 3, 4, 1, 2, 3, 4],
'var_1': [5, 7, 7, 9, 12, 9, 87, 90],
'var_2': [11, 8, 10, 6, 6, 9, 12, 9],
"var_3": [11, 8, 10, 6, 6, 9, 12, 9]})
我想把这个df转换成这样的形式:
df = pd.DataFrame({'ref': ['ref1', 'ref2'],
> 'step 1 - var_1': [5, 12],
> 'step 1 - var_2': [11, 6],
> 'step 1 - var_3': [11, 6],
> 'step 2 - var_1': [7, 12],
> 'step 2 - var_2': [8, 9],
> 'step 2 - var_3': [8, 9]})
提前谢谢你Best
编辑:格式和图像
4条答案
按热度按时间lx0bsm1f1#
在一行程序中使用新的"walrus"运算符尝试执行以下操作:
输出:
详情:
set_index
,带有列参考和步骤unstack
移动到列中的步骤sort_index
对列进行排序set_axis
和具有f字符串格式的列表解析来展开多索引 Dataframe 列标题与上述订单输出相同的替代方式,
x4shl7ld2#
一个选项是使用pyjnanitor中的pivot_wideer,通过
names_glue
参数抽象列重命名:names_glue
允许组合使用values_from
和names_from
参数-在上面的代码中,{step}
是names_from参数,而{_value}
是values_from
的占位符如果我们严格按照您的输出,那么就应该在
step
列上执行一个过滤器,只过滤小于3的值:iyfamqjs3#
用途:
输出:
llycmphe4#
诀窍是使用df.pivot。您可以选择
index='ref'
和columns='step'
:生成的表有一个
ref
的多索引和一个多列,多列包含step和var信息,因此我们可以使用这些信息来创建新的列标题,最后,我们可以重置索引: