Pandas数据操作 - 每行多次测量到每行一次

时间:2018-06-06 22:00:29

标签: python pandas

我在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并使用和不使用transpose()附加函数但没有成功。

这是我能找到的最相似的例子,但它并没有让我在那里:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

它是一个广泛而长期的问题

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

答案 1 :(得分:0)

另一种解决方案,使用melt

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