Pandas数据处理每行多个测量值到每lin一个测量值

2024-03-28 21:32:49 发布

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

我正在使用Python中的Pandas操作一个数据帧,以匹配特定的格式。你知道吗

我现在有一个数据框,每个测量位置(a或B)有一行。每行有一个标称目标和多个测量数据点。你知道吗

这是我目前的格式:

df=
    Location    Nominal Meas1   Meas2   Meas3
    A           4.0     3.8     4.1     4.3
    B           9.0     8.7     8.9     9.1

我需要处理这些数据,以便每行只有一个测量数据点,并将位置和标称值从源行复制到新行。测量数据也需要放在第一列。你知道吗

这是我需要的格式:

df =
     Meas       Location    Nominal
     3.8        A           4.0
     4.1        A           4.0
     4.3        A           4.0
     8.7        B           9.0
     8.9        B           9.0
     9.1        B           9.0

我尝试过concat和append函数,不管有没有transpose(),都没有成功。你知道吗

这是我能找到的最相似的例子,但它没有让我达到目的:

for index, row in df.iterrows():
    pd.concat([row]*3, ignore_index=True)

谢谢你!你知道吗


Tags: 数据目标pandasdfindex格式locationrow
2条回答

另一种解决方案,使用^{}

new_df = (df.melt(['Location','Nominal'],
                  ['Meas1', 'Meas2', 'Meas3'],
                  value_name = 'Meas')
          .drop('variable', axis=1)
          .sort_values('Location'))

>>> new_df
  Location  Nominal  Meas
0        A      4.0   3.8
2        A      4.0   4.1
4        A      4.0   4.3
1        B      9.0   8.7
3        B      9.0   8.9
5        B      9.0   9.1

这是一个从宽到长的问题

pd.wide_to_long(df,'Meas',i=['Location','Nominal'],j='drop').reset_index().drop('drop',1)
Out[637]: 
  Location  Nominal  Meas
0        A      4.0   3.8
1        A      4.0   4.1
2        A      4.0   4.3
3        B      9.0   8.7
4        B      9.0   8.9
5        B      9.0   9.1

相关问题 更多 >