Python 3.x 按时间戳分组单个CSV文件-熊猫

Python 3.x 按时间戳分组单个CSV文件-熊猫,python-3.x,pandas,Python 3.x,Pandas,我有一个几乎无穷无尽的水平csv,其中变量分布在标题上,我有许多重复的时间戳,这导致了如下场景: +------------+------------+------------+------------+ | Timestamp | Variable1 | Variable2 | .... | +------------+------------+------------+------------+ | 2017/02/12 | 20 |

我有一个几乎无穷无尽的水平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     |            |
+------------+------------+------------+------------+
我试图通过时间戳连接,以获得如下结果:

+------------+------------+------------+------------+
| 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