Pandas用相同的索引堆叠列-横向

rryofs0p  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(139)

我想操作数据框中包含的数据。数据框的结构如下

EID     FX      FY      FZ      SUB
1001    FXA     FYA     FZA     101
1002    FXB     FYB     FZB     101
1003    FXC     FYC     FZC     101
1004    FXD     FYD     FZD     101
1001    FXE     FYE     FZE     102
1002    FXF     FYF     FZF     102
1003    FXG     FYG     FZG     102
1004    FXH     FYH     FZH     102
1001    FXI     FYI     FZI     103
1002    FXJ     FYJ     FZJ     103
1003    FXK     FYK     FZK     103
1004    FXL     FYL     FZL     103

按列“SUB”对数据进行排序,并与列“EID”对齐,如下所示,

EID     FX      FY      FZ      SUB     FX      FY      FZ      SUB     FX      FY      FZ      SUB
1001    FXA     FYA     FZA     101     FXE     FYE     FZE     102     FXI     FYI     FZI     103
1002    FXB     FYB     FZB     101     FXF     FYF     FZF     102     FXJ     FYJ     FZJ     103
1003    FXC     FYC     FZC     101     FXG     FYG     FZG     102     FXK     FYK     FZK     103
1004    FXD     FYD     FZD     101     FXH     FYH     FZH     102     FXL     FYL     FZL     103

我已经完成了这个示例,它只使用一个列Move values in rows in a new column in pandas
但我想移动的不仅仅是一个专栏。
提前感谢您所能提供的任何帮助。

h6my8fg2

h6my8fg21#

其逻辑是:

  • 按“SUB”分组。
  • 迭代石斑鱼并收集所有子组。
  • 按指数连接所有收集的亚组。
df_arr = []
for key, sub_df in df.groupby("SUB"):
  df_arr.append(sub_df.set_index("EID"))

df = pd.concat(df_arr, axis="columns")

输出:

FX   FY   FZ  SUB   FX   FY   FZ  SUB   FX   FY   FZ  SUB
EID                                                             
1001  FXA  FYA  FZA  101  FXE  FYE  FZE  102  FXI  FYI  FZI  103
1002  FXB  FYB  FZB  101  FXF  FYF  FZF  102  FXJ  FYJ  FZJ  103
1003  FXC  FYC  FZC  101  FXG  FYG  FZG  102  FXK  FYK  FZK  103
1004  FXD  FYD  FZD  101  FXH  FYH  FZH  102  FXL  FYL  FZL  103
c90pui9n

c90pui9n2#

试试这个:

cols = df.columns[1:]
df = (df.set_index(['EID',df.groupby('EID').cumcount()])[cols]
        .unstack()
        .reset_index())

相关问题