为每个数据点创建新行

时间:2016-12-23 03:33:38

标签: excel python-3.x csv pandas

如何为熊猫数据框内的每个数据点创建一个新行。例如:

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

4 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我假设id是索引

df.stack().reset_index()

否则

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

答案 3 :(得分:0)

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

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