считая значения в нескольких столбцах одновременно - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть датафрейм, df как показано ниже

Index        DateTimestamp                a        b        c     
 0        2017-08-03 00:00:00            ta        bc      tt       
 1        2017-08-03 00:00:00            re                        
 3        2017-08-03 00:00:00                      cv      ma 

 4        2017-08-04 00:00:00                                     
 5        2017-09-04 00:00:00                      cv             
 :                 :                      :         :       :      
 :                 :                      :         :       :     

Я хочу сгруппировать по 1 дню количество значений в каждом столбце, не учитывая пустые значения в каждом столбце. Таким образом, результат будет

 Index                        a        b        c 
2017-08-03 00:00:00           2        2        2
2017-08-04 00:00:00           0        1        0

Я пробовал это, но не хочу, я хочу:

df2=df.groupby([pd.Grouper(key='DeviceDateTimeStamp', freq='1D')]) ['a','b','c'].apply(pd.Series.count)

1 Ответ

0 голосов
/ 13 ноября 2018

Используйте dt.floor или date для времени удаления с GroupBy.count для исключения пропущенных значений:

print (df)
   Index        DateTimestamp    a    b    c
0      0  2017-08-03 00:00:00   ta   bc   tt
1      1  2017-08-03 00:00:00   re  NaN  NaN
2      3  2017-08-03 00:00:00  NaN   cv   ma
3      4  2017-08-04 00:00:00  NaN  NaN  NaN
4      5  2017-09-04 00:00:00  NaN   cv  NaN

df2=df.groupby(df['DateTimestamp'].dt.floor('d'))['a','b','c'].count()
#another solution
#df2=df.groupby(df['DateTimestamp'].dt.date)['a','b','c'].count()
print (df2)
               a  b  c
DateTimestamp         
2017-08-03     2  2  2
2017-08-04     0  0  0
2017-09-04     0  1  0

EDIT:

print (df)
   Index        DateTimestamp   a   b   c
0      0  2017-08-03 00:00:00  ta  bc  tt
1      1  2017-08-03 00:00:00  re        
2      3  2017-08-03 00:00:00      cv  ma
3      4  2017-08-04 00:00:00            
4      5  2017-09-04 00:00:00      cv   

Или, если возможно, числовые значения в столбцах a,b,c:

c = ['a','b','c']
df2=df[c].astype(str).ne('').groupby(df['DateTimestamp'].dt.floor('d')).sum().astype(int)
print (df2)
               a  b  c
DateTimestamp         
2017-08-03     2  2  2
2017-08-04     0  0  0
2017-09-04     0  1  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...