Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在某些条件下,使用计数方法对数据帧重新采样_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 在某些条件下,使用计数方法对数据帧重新采样

Python 3.x 在某些条件下,使用计数方法对数据帧重新采样,python-3.x,pandas,Python 3.x,Pandas,我正在尝试从数据帧中重新采样数据。列具有不同类型的数据。对于其中一列,我想计算该列的值大于0的行数 一个小例子如下所示: import pandas as pd import numpy as np df = pd.DataFrame(data={'Date': pd.date_range('2018-01-01','2018-01-15'), 'A': np.random.randint(5, size=15)}) df.set_index(d

我正在尝试从数据帧中重新采样数据。列具有不同类型的数据。对于其中一列,我想计算该列的值大于0的行数

一个小例子如下所示:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={'Date': pd.date_range('2018-01-01','2018-01-15'),
                        'A': np.random.randint(5, size=15)})
df.set_index(df.Date, inplace=True)

df.resample('5D').count()
df.resample('5D').count(df[df.A > 0])
计数是有效的,但是我找不到一种方法来插入一个条件,即我只想对大于0的值进行计数。大概是这样的:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={'Date': pd.date_range('2018-01-01','2018-01-15'),
                        'A': np.random.randint(5, size=15)})
df.set_index(df.Date, inplace=True)

df.resample('5D').count()
df.resample('5D').count(df[df.A > 0])
但是,
TypeError:'DataFrame'对象是可变的,因此不能对它们进行散列处理

问题:如何在有条件的情况下
resample().count()
您可以使用
True
s值的
sum
,这些值是类似
1
s的过程:

np.random.seed(57)

import pandas as pd
import numpy as np

df = pd.DataFrame(data={'Date': pd.date_range('2018-01-01','2018-01-15'),
                        'A': np.random.randint(5, size=15)})
df.set_index(df.Date, inplace=True)

df1 = df.resample('5D')['A'].apply(lambda x: (x > 0).sum())
print (df1)
Date
2018-01-01    2
2018-01-06    3
2018-01-11    4
Name: A, dtype: int64
或者更好的解决方案是创建布尔掩码,并使用
重采样
聚合
求和

df1 = (df['A'] > 0).resample('5D').sum().astype(int)
print (df1)

Date
2018-01-01    2
2018-01-06    3
2018-01-11    4
Name: A, dtype: int32

是的,它之所以计数是因为它是布尔真值的和,比如
s=pd.Series([True,False,True,False,True])print(s.sum())