Python 3.x 同时计算多列中的值
我有一个数据帧,df如下Python 3.x 同时计算多列中的值,python-3.x,pandas,Python 3.x,Pandas,我有一个数据帧,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
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)
将或用于删除时间,排除缺少的计数值:
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
编辑:
或者如果可能的话,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
df2=df.groupby([pd.Grouper(key='DeviceDateTimeStamp',freq='1D'))['a','b','c'].count()
?我尝试了这段代码,但它每天都计算日期的出现次数,而不是列的值。谢谢它不起作用。它仍然为每天的所有列提供相同的值OK,解决方案有效如果缺少的值是NAN
s,那么缺少的值是什么?Emtry字符串?空格?缺少的值是空单元格spaces@Bode-如何工作df.ne(“”).groupby(df['DateTimestamp'].dt.floor('d'))['a','b','c'].sum()
?@Bode-如果检查df.ne(“”)
是否为缺少的单元格返回True?
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