Python:multiple columns to multiple rows高效?

2024-06-01 02:19:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何将一个df的多个列转换成如下所示的多个行? 我想这样做一个非常大的测向,所以我在寻找一个相对快速的方法。你知道吗

   current df:

          LOG_TIME  QP_HCP  IP_HCP  QP_PRP  IP_PRP
   0      68444.0      4.9     0.6     4.8     3.8


   df I want to obtain:

          LOG_TIME  ORIENTATION    QP    IP
   0      68444.0           HCP   4.9   0.6
   1      68444.0           PRP   4.8   3.8

Tags: to方法iplogdftimecurrenthcp
2条回答

首先,重塑您的数据帧,使您具有以下格式。你知道吗

    LOG_TIME    ORIENTATION value   result
0   68444.0     PRP         4.8     QP
1   68444.0     HCP         4.9     QP
2   68444.0     PRP         3.8     IP
3   68444.0     HCP         0.6     IP

你可以用以下方法来实现。你知道吗

new = df.melt(id_vars='LOG_TIME', value_vars=['QP_PRP', 'QP_HCP', 'IP_PRP', 'IP_HCP'], var_name='ORIENTATION')
new[['result', 'ORIENTATION']] = new['ORIENTATION'].str.split('_', expand=True).rename(columns={0: 'result', 1: 'ORIENTATION'})

然后你就可以透视数据了。你知道吗

new = new.pivot_table(index=['LOG_TIME', 'ORIENTATION'], columns='result', values='value')
pd.DataFrame(new.to_records())

Out[6]:

    LOG_TIME    ORIENTATION  IP     QP
0   68444.0     HCP          0.6    4.9
1   68444.0     PRP          3.8    4.8
hcp_df = df[['LOG_TIME', 'QP_HCP', 'IP_HCP' ]].values
prp_df = df[['LOG_TIME', 'QP_PRP', 'IP_PRP']].values
df2 = pd.DataFrame(prp_df, columns=['LOG_TIME', 'QP', 'IP'], index=['PRP'] *prp_df.shape[0])
df1 = pd.DataFrame(hcp_df, columns=['LOG_TIME', 'QP', 'IP'], index=['HCP'] * hcp_df.shape[0])
df1.append(df2).reset_index().rename({'index': 'ORIENTATION'}, axis=1)

以下代码在我这边起作用: 以下是我所做的:

  1. 从数据帧获取hcp和PRP值:
  2. 使用IP和QP的索引创建数据帧
  3. 附加2个数据帧:

所需的输出如下:

    ORIENTATION LOG_TIME    QP  IP
0   HCP          68444.0    4.9 0.6
1   PRP          68444.0    4.8 3.8

相关问题 更多 >