如何连续生成范围内的值?

时间:2017-02-05 10:06:44

标签: python pandas dataframe

我需要使用pandas修改Dataset。以下是我需要处理的特定列的详细信息:

df["Dependents"].value_counts()

0     345

1     102

2     101

3+     51

Name: Dependents, dtype: int64

df["Dependents"].notnull().value_counts()

True     599

False     15

Name: Dependents, dtype: int64

我需要逐一将null值分配为012。就像第一行一样,我指定0,然后下一行应为1,然后是2。然后再从0开始,直到填写所有null值。

我怎样才能实现它?

2 个答案:

答案 0 :(得分:3)

IIUC你可以这样做:

假设您有以下DF:

In [214]: df
Out[214]:
   Dependents
0         NaN
1           0
2           0
3           0
4         NaN
5           1
6         NaN
7          3+
8         NaN
9          3+
10          2
11         3+
12          1
13        NaN

解决方案:

In [215]: idx = df.index[df.Dependents.isnull()]

In [216]: idx
Out[216]: Int64Index([0, 4, 6, 8, 13], dtype='int64')

In [217]: df.loc[idx, 'Dependents'] = np.take(list('012'), [x%3 for x in range(len(idx))])

In [218]: df
Out[218]:
   Dependents
0           0
1           0
2           0
3           0
4           1
5           1
6           2
7          3+
8           0
9          3+
10          2
11         3+
12          1
13          1

答案 1 :(得分:2)

与MaxU的回答相似,但是使用numpy put with' wrap'模式。

Sample dataframe (df):

    Dependents
0   NaN      
1   0        
2   0        
3   0        
4   NaN      
5   1        
6   NaN      
7   3+       
8   NaN      
9   3+       
10  2        
11  3+       
12  1        
13  NaN  

idx = df.index[df.Dependents.isnull()]
np.put(df.Dependents, idx, [0, 1, 2], mode='wrap')

   Dependents
0   0        
1   0        
2   0        
3   0        
4   1        
5   1        
6   2        
7   3+       
8   0        
9   3+       
10  2        
11  3+       
12  1        
13  1