如何为熊猫数据框内的每个数据点创建一个新行。例如:
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()
答案 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中转换这样的数据。如果对你没用,那对其他人可能有用。