2017-09-15 108 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