我正在尝试从数据框中重新采样数据。列具有不同类型的数据。对于其中一列,我想计算该列的值大于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()
计数有效,但是我找不到一种方法来插入只希望对大于0的值进行计数的条件。
df.resample('5D').count(df[df.A > 0])
但是,TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
问题:如何在有条件的情况下resample().count()
答案 0 :(得分:3)
您可以使用sum
值中的Resampler.apply
和True
,这些过程类似于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
或者更好的解决方案是创建布尔掩码并使用resample
聚合sum
:
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