【问题标题】:Create new row for every datapoint为每个数据点创建新行
【发布时间】:2017-05-08 18:26:25
【问题描述】:

如何为 panda 数据框中的每个数据点创建一个新行。例如:

id |2016 |2015 |2014
ID1|1|2|3
ID2|4|5|6
ID3|7|8|9

转换为:

idnum| Date |Datapoint_Value
ID1|2014|3
ID2|2014|6
ID3|2014|9
ID1|2015|2
ID2|2015|5
ID3|2015|8
ID1|2016|1
ID2|2016|4
ID3|2016|7

我正在使用 pandas 从 excel 导入数据,并希望将数据存储在一个空数据框中,然后写入 csv 文件。

import pandas as pd

raw_data = pd.read_excel(open('C:\\Python_Loops\\New_doc.xlsx', 'rb'),    sheetname='Advances & Redraw') # Raw data
twisted_df = pd.DataFrame()

【问题讨论】:

    标签: excel python-3.x csv pandas


    【解决方案1】:

    使用melt

    twisted_df = pd.melt(raw_data, id_vars='id', 
                         var_name='Date', value_name='Datapoint_Value')
    
    twisted_df.head()
    
    #     id  Date  Datapoint_Value
    # 0  ID1  2016                1
    # 1  ID2  2016                4
    # 2  ID3  2016                7
    # 3  ID1  2015                2
    # 4  ID2  2015                5
    

    然后您可以将其导出为 CSV 文件。

    twisted_df.to_csv('twisted_df.csv')
    

    【讨论】:

    • 谢谢罗曼。这对我很有帮助!
    【解决方案2】:

    我喜欢对这类事情使用索引,因为年份确实也是一个标识符。正确设置索引后,stack 可以将剩余的列名称作为标识符,并且每行只有一个值。

    import pandas as pd
    
    raw_data = pd.read_excel('C:\\Python_Loops\\New_doc.xlsx', sheetname='Advances & Redraw') 
    
    twisted_df = raw_data.set_index('id').stack().rename(columns={'level_1':'year'})
    
    twisted_df.to_csv('twisted_df.csv')
    

    【讨论】:

      【解决方案3】:

      我假设id 是索引

      df.stack().reset_index()
      

      否则

      df.set_index('id').stack().reset_index()
      

      【讨论】:

        【解决方案4】:

        不管怎样,您也可以像这样纯粹在 Excel 中转换数据。如果对您没有用,它可能对其他人有用。

        1. Alt+D+P
        2. 选择多个合并范围并点击下一步
        3. 将选择保留为为我创建单个页面字段,然后单击下一步
        4. 选择您的数据作为范围并单击添加,然后单击完成
        5. 将出现一个与您的原始数据一样的数据透视表。点击右下角的值,总计,一个新的表格将会按照需要的格式创建

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多