我有一个几乎无穷无尽的水平csv,其中变量在标题中传播,我有许多重复的时间戳,导致这样的场景:
+------------+------------+------------+------------+
| 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 | |
+------------+------------+------------+------------+
我在熊猫中比较新,但我觉得这可以通过多个数据帧轻松完成,但我有点怀疑对一个数据帧进行分组。任何人都可以帮我一把吗?非常感谢你!
答案 0 :(得分:4)
您可以按时间戳分组并合并值
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()
答案 1 :(得分:1)
我使用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_index
pd.concat(
[s.dropna() for c, s in df.set_index('Timestamp').iteritems()],
axis=1
).reset_index()
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
答案 2 :(得分:1)
最简单的解决方案:
带参数level=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
df = df.groupby('Timestamp').sum()
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.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
答案 3 :(得分:0)
使用与.groupby()
.sum()
df_grouped = df.groupby('Timestamp').sum()
通过对该组的每列进行求和,按组聚合数据(在本例中为Timestamp)。在您的示例中,每个列每个日期都有一个条目,因此求和应提供正确的解决方案。