计算pandas中空单元格之间填充单元格的数量

时间:2017-12-06 15:27:53

标签: python pandas

以下是我的数据框的一部分示例:

col1     col2
items1    10
items1     5
items1     3
items1     2
items1   NaN
items1   NaN
items1   NaN
items1     4
items1     1
items1     1
items2     6
items2     4
items2     5
items2   NaN
items2   NaN
items2     2
items2     8
items2     7
items2     9
items2   NaN
...

我需要列col1中的每个唯一值来计算空单元格之间的非空单元格数。我尝试使用groupby()col1count()中的唯一值进行分组来计算值,但它会计算col1中唯一值的所有非空值。

这是我的代码:

df = pd.DataFrame({'col1':('items1','items1','items1','items1','items1','items1','items1','items1','items1','items1','items2','items2','items2','items2','items2','items2','items2','items2','items2','items2'),
                  'col2': (10, 5, 3, 2, np.nan, np.nan, np.nan, 4, 1, 1, 6, 4, 5, np.nan, np.nan, 2, 8, 7, 9, np.nan)})
df.groupby('col1')['col2'].count().reset_index()

结果如下:

      col1  col2
0   items1     7
1   items2     7

但我需要得到以下内容:

      col1  col2
0   items1     4
1   items1     3
2   items2     3
3   items2     4

我很感激任何建议!

1 个答案:

答案 0 :(得分:2)

IIUC,PS:我没有添加reset_index()它会使代码太长..

df.groupby([df['col1'],df['col2'].isnull().diff().fillna(0).cumsum()])['col2'].count().replace(0,np.nan).dropna()
Out[885]: 
col1    col2
items1  0       4.0
        2       3.0
items2  2       3.0
        4       4.0
Name: col2, dtype: float64