2017-09-15 109 views
2

我有一个熊猫据帧像这样,合并行基于索引

Timestamp Meter1 Meter2 
0   234 NaN 
1   235 NaN 
2   236 NaN 
0   NaN 100 
1   NaN 101 
2   NaN 102 

,我有麻烦了基于索引时间戳是这样的合并行,

Timestamp Meter1 Meter2 
0   234 100 
1   235 101 
2   236 102 

回答

1

使用groupby

df.groupby(level=0).max() 

OR

df.groupby('Timestamp').max() 

输出

  Meter1 Meter2 
Timestamp     
0   234.0 100.0 
1   235.0 101.0 
2   236.0 102.0 
1

使用groupby和聚集sum

df = df.groupby(level=0).sum() 
print (df) 
      Meter1 Meter2 
Timestamp     
0   234.0 100.0 
1   235.0 101.0 
2   236.0 102.0 

如果只ints

df = df.groupby(level=0).sum().astype(int) 
print (df) 
      Meter1 Meter2 
Timestamp     
0    234  100 
1    235  101 
2    236  102 

但也许问题是您在concat忘记axis=1

print (df1) 
      Meter1 
Timestamp   
0    234 
1    235 
2    236 

print (df2) 
      Meter2 
Timestamp   
0    100 
1    101 
2    102 

print (pd.concat([df1, df2])) 
      Meter1 Meter2 
Timestamp     
0   234.0  NaN 
1   235.0  NaN 
2   236.0  NaN 
0    NaN 100.0 
1    NaN 101.0 
2    NaN 102.0 

print (pd.concat([df1, df2], axis=1)) 
      Meter1 Meter2 
Timestamp     
0    234  100 
1    235  101 
2    236  102 
2

选项0

df.max(level=0) 

      Meter1 Meter2 
Timestamp     
0   234.0 100.0 
1   235.0 101.0 
2   236.0 102.0 

选项1

df.sum(level=0) 

      Meter1 Meter2 
Timestamp     
0   234.0 100.0 
1   235.0 101.0 
2   236.0 102.0 

的Opti 2
令人不安的回答

df.stack().unstack() 

      Meter1 Meter2 
Timestamp     
0   234.0 100.0 
1   235.0 101.0 
2   236.0 102.0 

正如@jezrael长大并链接到发行here

然而,正如我理解groupby.firstgroupby.last是,它会返回第一个(或最后一个)组中的每个列的有效值。换句话说,我相信这是按预期工作的。

选项3

df.groupby(level=0).first() 

      Meter1 Meter2 
Timestamp     
0   234.0 100.0 
1   235.0 101.0 
2   236.0 102.0 

选项4

df.groupby(level=0).last() 

      Meter1 Meter2 
Timestamp     
0   234.0 100.0 
1   235.0 101.0 
2   236.0 102.0 

+0

我会提到它,但是这是预期的行为。也就是说,它正在选择第一个非空值或有效值。使用last会选择最后一个非空值或有效值。 – piRSquared

+0

事实上,你的答案是唯一没有upvotes意味着你是upvoter。不幸的是,没有人会回报你的青睐... hrrumph –

+0

@cᴏʟᴅsᴘᴇᴇᴅ参见**选项2 **另外,不打扰我( - :我喜欢我的答案! – piRSquared