首页 > 解决方案 > 使用列和行 python pandas

问题描述

我正在尝试从熊猫数据框中收集数据。在屏幕截图中,您将看到如何构建数据库的一部分。

数据库

所以现在我想分析相同的其他列。对于相同的 hhid,我想计算离开时间。我想选择第一个“从家”行并读取起始值。那么对于相同的 hhid,这不应该再次被覆盖。之后,我想要最后一个“回家”条目的最终值,然后计算它们之间的差异。我试图实现这一点,但大多数时候从家里的读取起始值被覆盖并且差异不一样。

这是我的日常:

wid=1
for i in range(0,len(dataframe)):
             
    if (i+1 >= len(dataframe)):
              break  
    if (
               dataframe['hhid'].values[i] == dataframe['hhid'].values[i+1] or                                   
               dataframe['hhid'].values[i] == dataframe['hhid'].values[i-1]
      ):
       
       
       if (
              
               dataframe['w01'].values[i] == 'from Hause' and
               wid >= dataframe['wid'].values[i]
         ):
               
               bla = dataframe['wid'].values[i]
               
               start =  dataframe['st_std'].values[i]
               print('start',start)
               wid = dataframe['wid'].values[i]
       
            
       if (
               dataframe['w04'].values[i] == 'to Hause' 
              
          ):
        
           end =  dataframe['en_std'].values[i]
           print('end',end)
           dataframe['awaytime'].values[i]= (end-start)
           
           if end-start < 0:
               dataframe['awaytime'].values[i]= (start-end)+1
           
       else:
           continue
       
    if(dataframe['hhid'].values[i] != dataframe['hhid'].values[i+1]):
            if (i+1 >= len(dataframe)):
              break 
            wid=dataframe['wid'].values[i+1]
            
return dataframe

任何想法如何正确地做到这一点?

编辑

excel格式的数据样本。不幸的是,我不允许上传完整的数据集: https ://www.dropbox.com/s/af3wb7fcsqhukvz/Export_db_awaytime.xlsx?dl=0

标签: pythonpandas

解决方案


我想我解决了这个问题。我添加了一个计数器来保存来自家的第一个值。我得到的值很好。

仅供参考代码:

counter=0
test_counter=0
from_home=0
for i in range(0,len(dataframe)):

    if (i+1 >= len(dataframe)):
              break  
    """Check for same hhid"""
    if (
               dataframe['hhid'].values[i] == dataframe['hhid'].values[i+1] or                                   
               dataframe['hhid'].values[i] == dataframe['hhid'].values[i-1]
       ):

       """Check for first departure"""
       if (

               dataframe['w01'].values[i] == 'from home' and
               counter<=test_counter
         ):

               start =  dataframe['st_std'].values[i]
               #print('start',start)
               from_home=1
               counter+=1
       """Check way home"""    
       if (
               dataframe['w04'].values[i] == 'to home' and
               from_home==1
          ):

           end =  dataframe['en_std'].values[i]

           dataframe['awaytime'].values[i]= (end-start)

           if end-start < 0:
               dataframe['awaytime].values[i]= (start-end)+1

    """Check when another hhid is next entry"""   

    if(dataframe['hhid'].values[i] != dataframe['hhid'].values[i+1]):
            if (i+1 >= len(dataframe)):
              break 
            counter=0
            from_home=0

推荐阅读