【问题标题】:Pandas data manipulation - multiple measurements per line to one per line [duplicate]熊猫数据操作 - 每行多次测量到每行一次[重复]
【发布时间】:2018-11-16 17:18:54
【问题描述】:

我在 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

我尝试过使用和不使用 transpose() 的 concat 和 append 函数,但均未成功。

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

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

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      另一种解决方案,使用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
      

      【讨论】:

        猜你喜欢
        • 2021-01-19
        • 2018-01-07
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        相关资源
        最近更新 更多