use*_*613 2 python pivot python-3.x pandas
我正在尝试将具有两列(重复的date_time序列和单个数值列)的长文本文件重新整形为具有单个索引date_time和多列数据的Pandas数据帧.实际文件是100套82年的每日降雨量数据(来自随机发电机),约为300万线.我希望在82 x 365(366闰年)date_time指数中有100列降雨数据.为了简化练习,我在下面给出一个例子(代表闰年的四行序列):
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
Run Code Online (Sandbox Code Playgroud)
所需的输出类似于:
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
Run Code Online (Sandbox Code Playgroud)
这似乎非常简单,但它让我击败.我试图将原始系列转换为数据帧,然后使用以下内容,但Pandas似乎不喜欢单个列:
df.pivot()
Run Code Online (Sandbox Code Playgroud)
您应该首先创建一个新列,指示该值必须来自哪一列.
假设您知道每个序列的开始日期(并且每次都相同),您可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
如果您有此列,则可以使用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
Run Code Online (Sandbox Code Playgroud)
编辑:感谢DSM,另一种查找组的方法(以及一组您不必知道每组的第一项):
In [10]: df['date'] = pd.to_datetime(df['date'])
In [11]: df['set'] = (df['date'].diff().fillna(0) <= 0).cumsum()
Run Code Online (Sandbox Code Playgroud)
这是基于以下事实:当新集合开始时,与前一行的时间差将为负(如果数据按时间排序).
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |