为每个数据点创build新的行

如何在pandas数据框中为每个数据点创build一个新行。 例如:

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() 

使用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') 

我喜欢在给定的年份使用索引,这也是一个标识符。 通过正确设置索引, 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') 

我假设id是索引

 df.stack().reset_index() 

除此以外

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

对于它的价值,你也可以像纯粹在Excel中一样转换数据。 如果对你没有用处,可能对其他人有用。

  1. Alt + D + P
  2. select多个合并范围并单击下一步
  3. 将select保留为为我创build单个页面字段,然后单击下一步
  4. select您的数据作为范围,然后单击添加,然后单击完成
  5. 数据透视表将出现,看起来就像您的原始数据。 点击右下angular的值, 总计 ,将会以所需的格式创build一个新表格