你如何使用熊猫中的条件语句每日重新采样

时间:2017-09-02 15:59:16

标签: python-2.7 pandas

我下面有一个pandas数据框:(它确实有其他列,但这些是重要的列)Date列是索引

           Number_QA_VeryGood  Number_Valid_Cells   Time  
Date                                                       
2015-01-01                  91                  92  18:55  
2015-01-02                   6                   6  18:00  
2015-01-02                  13                  13  19:40  
2015-01-03                 106                 106  18:45  
2015-01-05                  68                  68  18:30  
2015-01-06                 111                 117  19:15  
2015-01-07                  89                  97  18:20  
2015-01-08                  86                  96  19:00  
2015-01-10                   9                  16  18:50 

我需要每天重新采样,前两列将使用sum重新采样。 最后一列需要查看Number_Valid_Cells列的最高每日值,并将该时间用于该值。

示例输出应该是:(1/2/02是更改的行)

            Number_QA_VeryGood  Number_Valid_Cells   Time  
Date                                                       
2015-01-01                  91                  92  18:55  
2015-01-02                  19                  19  19:40  
2015-01-03                 106                 106  18:45  
2015-01-05                  68                  68  18:30  
2015-01-06                 111                 117  19:15  
2015-01-07                  89                  97  18:20  
2015-01-08                  86                  96  19:00  
2015-01-10                   9                  16  18:50  

让这个工作的最佳方法是什么。

2 个答案:

答案 0 :(得分:1)

如果您的Number_Valid_Cells值已排序,则可以对前两列使用groupby sum

ndf = df.reset_index().groupby('Date').sum()
ndf['Time'] = df.reset_index().drop_duplicates(subset='Date',keep='last').set_index('Date')['Time']
                Number_QA_VeryGood  Number_Valid_Cells   Time
Date                                                     
2015-01-01                  91                  92  18:55
2015-01-02                  19                  19  19:40
2015-01-03                 106                 106  18:45
2015-01-05                  68                  68  18:30
2015-01-06                 111                 117  19:15
2015-01-07                  89                  97  18:20
2015-01-08                  86                  96  19:00
2015-01-10                   9                  16  18:50

答案 1 :(得分:1)

或者你可以尝试

df.groupby(df.index).agg({'Number_QA_VeryGood':'sum','Number_Valid_Cells':'sum','Time':'last'})
Out[276]: 
             Time  Number_QA_VeryGood  Number_Valid_Cells
Date                                                     
2015-01-01  18:55                  91                  92
2015-01-02  19:40                  19                  19
2015-01-03  18:45                 106                 106
2015-01-05  18:30                  68                  68
2015-01-06  19:15                 111                 117
2015-01-07  18:20                  89                  97
2015-01-08  19:00                  86                  96
2015-01-10  18:50                   9                  16

更新:sort_values首先

df.sort_values('Number_Valid_Cells').groupby(df.sort_values('Number_Valid_Cells').index)\
  .agg({'Number_QA_VeryGood':'sum','Number_Valid_Cells':'sum','Time':'last'})

   Out[314]: 
            Time  Number_QA_VeryGood  Number_Valid_Cells
Date                                                    
1/1/2015   18:55                  91                  92
1/10/2015  18:50                   9                  16
1/2/2015   16:40#here.changed     19                  19
1/3/2015   18:45                 106                 106
1/5/2015   18:30                  68                  68
1/6/2015   19:15                 111                 117
1/7/2015   18:20                  89                  97
1/8/2015   19:00                  86                  96

数据输入:

              Number_QA_VeryGood  Number_Valid_Cells Time
Date                                                     
1/1/2015                   91               92      18:55
1/2/2015                    6                6      18:00
1/2/2015                   13               13      16:40#I change here
1/3/2015                  106              106      18:45
1/5/2015                   68               68      18:30
1/6/2015                  111              117      19:15
1/7/2015                   89               97      18:20
1/8/2015                   86               96      19:00
1/10/2015                   9               16      18:50