我有一个文本文件,每行包含数据,每行都有一个时间戳。 所以我将数据读取到这样的数据框:
table = pd.read_table(file, sep='|', skiprows=[1], usecols = columns, parse_dates = dateColumns, date_parser = parsedate, converters=columnsFormat)
到目前为止,非常好。
我的结果是一个数据框,如下例所示:
Name Local Code Date Value
A1 Here 01 01-01-1990 1.2
A1 Here 01 01-02-1990 0.8
A1 Here 01 01-03-1990 1.6
...
A2 There 02 01-01-1990 1.1
A2 There 02 01-02-1990 0.7
A2 There 02 01-03-1990 1.3
...
An Where n 12-31-2013 2.1
日期是按时间顺序排列的,但我有几个小组,但他们没有相同数量的元素。
我想要做的是按Name
,Local
和Code
对数据框进行分组。所以我可以将这些值作为索引,将Date和Value作为组的列。
类似下面的示例:
(Index) Date Value
(A1 Here 01) 01-01-1990 1.2
01-02-1990 0.8
01-03-1990 1.6
...
(A2 There 02) 01-01-1990 1.1
01-02-1990 0.7
01-03-1990 1.3
...
(An Where n) 12-31-2013 2.1
但是当我执行
时,而不是像这样的组table = table.groupby(['Name', 'Local', 'Code'])
我最终在下面有这样的团体。第一组包含第1天的所有数据,第二组包含第2天的所有数据,依此类推。
Name Local Code Date Value
A1 Here 01 01-01-1990 1.2
A2 There 02 01-01-1990 1.1
...
A1 Here 01 01-02-1990 0.8
A2 There 02 01-02-1990 0.7
...
A1 Here 01 01-03-1990 1.6
A2 There 02 01-03-1990 1.3
...
An Where n 12-31-2013 2.1
关于我如何按照我的解释分组的任何想法?
如果我使用table = table.groupby(['Name', 'Local', 'Code', 'Date'])
,我有一个组:
Name Local Code Date Value
A1 Here 01 01-01-1990 1.2
01-02-1990 0.8
01-03-1990 1.6
...
A2 There 02 01-01-1990 1.1
01-02-1990 0.7
01-03-1990 1.3
...
An Where n 12-31-2013 2.1
这几乎是我想要的,但我必须在Name
,Local
和Code
分成几组。有可能吗?
阅读表格时,parse_dates
和converters
会改变索引中的内容吗?
希望我现在明白了。 谢谢。
答案 0 :(得分:1)
作为一种解决方法,您可以set_index然后分组索引:
In [11]: df1 = df.set_index(['Name', 'Local', 'Code'])
In [12]: g = df1.groupby(df1.index)
In [13]: for i in df1.groupby(df1.index): print i
(('A1', 'Here', 1),
Date Value
Name Local Code
A1 Here 1 01-01-1990 1.2
1 01-02-1990 0.8
1 01-03-1990 1.6)
答案 1 :(得分:0)
回答你的上一个问题:
如果你遍历
groups = df.groupby(['name','local','code'])
您应该为每个组获取单独的数据框,即:
for g, grp in groups:
print grp