[英]Reshaping two-column data using pandas pivot
我正在嘗試將具有兩列(重復的date_time序列和一列數值)的長文本文件重塑為具有date_time的單個索引和多列數據的Pandas數據框。 實際文件是100組82年的每日降雨量數據(來自隨機發電機),大約300萬行。 我想針對82 x 365(366年366)date_time索引獲取100列降雨數據。 為了簡化練習,我在下面提供一個示例(代表a年的四行序列):
2014/01/01 1
2014/01/02 2
2014/01/03 3
2014/01/01 4
2014/01/02 5
2014/01/03 6
2014/01/04 7
2014/01/01 8
2014/01/02 9
2014/01/03 10
所需的輸出類似於:
0 1 2
2014/01/01 1 4 8
2014/01/02 2 5 9
2014/01/03 3 6 10
2014/01/04 nan 7 nan
這似乎非常簡單,但是卻讓我敗下陣來。 我試圖將原始系列轉換為數據框,然后使用以下內容,但Pandas似乎不喜歡一列:
df.pivot()
您應該首先創建一個新列,以指示該值必須位於哪一列中。
假設您知道每個序列的開始日期(並且每次都相同),則可以例如執行以下操作:
In [7]: df['set'] = (df['date'] == '2014/01/01').cumsum()
In [8]: df
Out[8]:
date value set
0 2014/01/01 1 1
1 2014/01/02 2 1
2 2014/01/03 3 1
3 2014/01/01 4 2
4 2014/01/02 5 2
5 2014/01/03 6 2
6 2014/01/04 7 2
7 2014/01/01 8 3
8 2014/01/02 9 3
9 2014/01/03 10 3
當您擁有此列時,可以使用pivot
:
In [9]: df.pivot(index='date', columns='set', values='value')
Out[9]:
set 1 2 3
date
2014/01/01 1 4 8
2014/01/02 2 5 9
2014/01/03 3 6 10
2014/01/04 NaN 7 NaN
編輯:感謝DSM,這是找到組的另一種方法(並且您不必知道每個組的第一項):
In [10]: df['date'] = pd.to_datetime(df['date'])
In [11]: df['set'] = (df['date'].diff().fillna(0) <= 0).cumsum()
這是基於以下事實:當新的集合開始時,與上一行的時間差將為負(如果數據按時間排序)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.