Python 3.x 按时间戳分组单个CSV文件-熊猫
我有一个几乎无穷无尽的水平csv,其中变量分布在标题上,我有许多重复的时间戳,这导致了如下场景:Python 3.x 按时间戳分组单个CSV文件-熊猫,python-3.x,pandas,Python 3.x,Pandas,我有一个几乎无穷无尽的水平csv,其中变量分布在标题上,我有许多重复的时间戳,这导致了如下场景: +------------+------------+------------+------------+ | Timestamp | Variable1 | Variable2 | .... | +------------+------------+------------+------------+ | 2017/02/12 | 20 |
+------------+------------+------------+------------+
| Timestamp | Variable1 | Variable2 | .... |
+------------+------------+------------+------------+
| 2017/02/12 | 20 | | |
| 2017/02/13 | 20 | | |
| 2017/02/14 | 30 | | |
| 2017/02/12 | | 5 | |
| 2017/02/13 | | 2 | |
| 2017/02/14 | | 10 | |
| ... | | | |
+------------+------------+------------+------------+
+------------+------------+------------+------------+
| Timestamp | Variable1 | Variable2 | .... |
+------------+------------+------------+------------+
| 2017/02/12 | 20 | 5 | |
| 2017/02/13 | 20 | 2 | |
| 2017/02/14 | 30 | 10 | |
+------------+------------+------------+------------+
我试图通过时间戳连接,以获得如下结果:
+------------+------------+------------+------------+
| Timestamp | Variable1 | Variable2 | .... |
+------------+------------+------------+------------+
| 2017/02/12 | 20 | | |
| 2017/02/13 | 20 | | |
| 2017/02/14 | 30 | | |
| 2017/02/12 | | 5 | |
| 2017/02/13 | | 2 | |
| 2017/02/14 | | 10 | |
| ... | | | |
+------------+------------+------------+------------+
+------------+------------+------------+------------+
| Timestamp | Variable1 | Variable2 | .... |
+------------+------------+------------+------------+
| 2017/02/12 | 20 | 5 | |
| 2017/02/13 | 20 | 2 | |
| 2017/02/14 | 30 | 10 | |
+------------+------------+------------+------------+
我在pandas中相对较新,但我觉得这可以通过多个数据帧轻松完成,但我有点怀疑将单个数据帧分组。谁能帮我一把吗?多谢各位 您可以按时间戳分组并组合值
df.groupby('Timestamp')['Variable1', 'Variable2'].apply(lambda x: x.sum()).reset_index()
你得到
Timestamp Variable1 Variable2
0 2017/02/12 20 5
1 2017/02/13 20 2
2 2017/02/14 30 10
编辑:由于@piRSquared,更加通用
df.set_index('Timestamp').groupby(level=0).sum().reset_index()
我会使用
pd.concat
+pd.DataFrame.iteritems
pd.concat([s.dropna() for c, s in df.set_index('Timestamp').iteritems()], axis=1)
Variable1 Variable2
Timestamp
2017/02/12 20.0 5.0
2017/02/13 20.0 2.0
2017/02/14 30.0 10.0
使用
reset\u索引
最简单的解决方案:
+带参数级别=0
:
df = df.set_index('Timestamp').sum(level=0)
print (df)
Variable1 Variable2
Timestamp
2017/02/12 20.0 5.0
2017/02/13 20.0 2.0
2017/02/14 30.0 10.0
df = df.set_index('Timestamp').sum(level=0).reset_index()
print (df)
Timestamp Variable1 Variable2
0 2017/02/12 20.0 5.0
1 2017/02/13 20.0 2.0
2 2017/02/14 30.0 10.0
+:
使用
.groupby()
链接到.sum()
df\u group=df.groupby('Timestamp').sum()
这将通过对该组的每列求和,按组(在本例中为时间戳)聚合数据。在您的示例中,每列每个日期都有一个条目,因此求和应提供正确的解决方案。变量太多。我可以应用括号中相同类型的df.列[1:-1]吗?:)
df.set_index('Timestamp').groupby(level=0.sum().reset_index()
对不起,这对我不起作用。另外,df.set_index('Timestamp').groupby(level=0.sum().reset_index()
抛出一个sintaxe错误。我使用了其他建议,当我没有得到错误时,整个数据帧中只会得到null值。例如:pd.concat([s.dropna()代表c,s代表df.set_index('Z Ts Read').iteritems()],axis=1)
这里我得到一个“ValueError:cannot reindex from a replicate axis”:/Hi,谢谢你,我尝试了你的解决方案,得到了一个ValueError:cannot reindex from a replicate axis。知道吗?那是因为列中的值有重复的日期。这可能是因为您有空字符串'
,而不是空字符串None
或NaN
。如果是这种情况,您可以尝试使用此df.replace({'':None},).set_index('Timestamp').iteritems()
代替df.set_index('Timestamp').iteritems()
df = df.groupby('Timestamp').sum().reset_index()
print (df)
Timestamp Variable1 Variable2
0 2017/02/12 20.0 5.0
1 2017/02/13 20.0 2.0
2 2017/02/14 30.0 10.0