我有一个像这样的数据框:
>>> df
TYPE A B C D
0 IN 550 350 600 360
1 OUT 340 270 420 190
我想将其重塑为这种形状:
AIN AOUT BIN BOUT CIN COUT DIN DOUT
550 340 350 270 600 420 360 190
所以我使用这些代码来实现它:
ds = df.melt().T.iloc[1:,2:]
ds.columns = ['AIN','AOUT','BIN','BOUT','CIN','COUT','DIN','DOUT']
>>> ds
AIN AOUT BIN BOUT CIN COUT DIN DOUT
value 550 340 350 270 600 420 360 190
它确实有效,但看起来很愚蠢,列名是手动输入的,我想知道是否有更好的、更符合 Python 风格的方法来做到这一点。有什么想法吗?
PS 输出数据框中的“值”并不重要。
一种可能的解决方案,其步骤如下:
该方法从数据框中
drop
删除该列,从而产生一个新的数据框。TYPE
df
该方法从修改后的数据框中
values
提取底层数组。numpy
该
reshape
方法将数组重塑为具有一行且列数与原始数据框相同的二维数组。该
columns
参数设置为列表推导生成的字符串列表。每个字符串都是列名df
和列值的串联TYPE
。最后,使用重塑后的数组和新的列名创建一个新的数据框。
输出:
代码
将
join
函数(python)与map
函数(pandas)应用于多索引。出去:
我选择
pivot
函数是因为创建 1 行数据框时不方便,因为melt
和都stack
需要T
。(如果我要创建系列或 1 列数据框,我会选择melt
或stack
。)示例代码
df.columns[1:]
循环遍历 A,B,C,D 列,排除该TYPE
列。该循环
loc
用于过滤行TYPE
,然后提取每列的相应值。然后通过将变量名(例如 A、B 等)与 IN 和 OUT 后缀组合来构造新列。
输出