2015-05-28 52 views
0

我試圖將具有相同時間戳的數據幀的所有行組合到一行中。該df是如下如何將行與相同的時間戳結合?

   A  B  ... 
timestamp 
    11:00 5  10  ... 
    12:00 15  20  ... 
    ...  ... ... 

任何幫助,將不勝感激5K通過20.

   A  B  ... 
timestamp 
    11:00 NaN 10  ... 
    11:00 5  NaN ... 
    12:00 15  20  ... 
    ...  ... ... 

組2 11:00行。謝謝。

我已經試過

df.groupby(df.index).sum() 
+0

如果他們同時填滿了A列和B列,該怎麼辦? – RafaelC

+0

你在問上面的NaN是否是數值?在我的情況中,對於每個唯一的時間戳(上述例子中的2行11),每列只有1個值。我最初通過索引和總和嘗試過一個組,但是這給我留下了所有的NaN。 – pmdaly

+0

發佈你已經試過的代碼 – RafaelC

回答

0

你不能在python中總結一個數字和一個NaN。您可能需要使用.aggregate():)

+0

是的,我一直在搞亂聚合,但我似乎無法弄清楚。 – pmdaly

0

您可以將melt('unpivot')DataFrame將其從寬格式轉換爲長格式,刪除空值,然後通過groupby聚合。

import pandas as pd 

df = pd.DataFrame({'timestamp' : ['11:00','11:00','12:00'], 
       'A' : [None,5,15], 
       'B' : [10,None,20] 
       }) 

    A B timestamp 
0 NaN 10 11:00 
1 5 NaN 11:00 
2 15 20 12:00 

df2 = pd.melt(df, id_vars = 'timestamp') # specify the value_vars if needed 

    timestamp variable value 
0 11:00  A   NaN 
1 11:00  A   5 
2 12:00  A   15 
3 11:00  B   10 
4 11:00  B   NaN 
5 12:00  B   20 

df2.dropna(inplace=True) 
df3 = df2.groupby(['timestamp', 'variable']).sum() 

         value 
timestamp variable  
11:00  A   5 
      B   10 
12:00  A   15 
      B   20 

df3.unstack() 

      value 
variable A B 
timestamp  
11:00  5 10 
12:00  15 20 
0

groupby用0代替NaN值後。

df.fillna(0, inplace=True) 
df.groupby(df.index).sum()