大熊猫在每行下面包含'na'的行

时间:2015-11-02 14:45:30

标签: python pandas

我有一个数据框,比如4列[['a','b','c','d']],我在其中添加了另一列['total'],其中包含每行所有其他列的总和。然后,我添加另一列['growth of total'],其中包含总增长率。

[['a','b','c','d']]中的某些值为空,导致['total']列对这些行无效。我可以用df.dropna(how ='any')轻松摆脱这些行。

但是,我的增长率不仅对[['a','b','c','d']]中缺少值的行有效,而且对下一行也有效。如何删除所有这些行?

2 个答案:

答案 0 :(得分:1)

以下是我认为您正在寻找的一个选项:

In [76]: df = pd.DataFrame(np.arange(40).reshape(10,4))

In [77]: df.ix[1,2] = np.nan

In [78]: df.ix[6,1] = np.nan

In [79]: df['total'] = df.sum(axis=1, skipna=False)

In [80]: df
Out[80]:
    0   1   2   3  total
0   0   1   2   3      6
1   4   5 NaN   7    NaN
2   8   9  10  11     38
3  12  13  14  15     54
4  16  17  18  19     70
5  20  21  22  23     86
6  24 NaN  26  27    NaN
7  28  29  30  31    118
8  32  33  34  35    134
9  36  37  38  39    150

In [81]: df['growth'] = df['total'].iloc[1:] - df['total'].values[:-1]

In [82]: df
Out[82]:
    0   1   2   3  total  growth
0   0   1   2   3      6     NaN
1   4   5 NaN   7    NaN     NaN
2   8   9  10  11     38     NaN
3  12  13  14  15     54      16
4  16  17  18  19     70      16
5  20  21  22  23     86      16
6  24 NaN  26  27    NaN     NaN
7  28  29  30  31    118     NaN
8  32  33  34  35    134      16
9  36  37  38  39    150      16

答案 1 :(得分:1)

IIUC正确地,您可以notnull使用all屏蔽NaN行以及NaN行后面的所有行:

In [43]:
df = pd.DataFrame({'a':[0,np.NaN, 2, 3,np.NaN], 'b':[np.NaN, 1,2,3,4], 'c':[0, np.NaN,2,3,4]})
df

Out[43]:
    a   b   c
0   0 NaN   0
1 NaN   1 NaN
2   2   2   2
3   3   3   3
4 NaN   4   4

In [44]:
df[df.notnull().all(axis=1) & df.shift().notnull().all(axis=1)]

Out[44]:
   a  b  c
3  3  3  3
相关问题