设置为第一行pandas DataFrame

时间:2017-06-28 01:06:02

标签: pandas

我想在pandas DataFrame的前n行的某些列中设置一个值。

>>> example = pd.DataFrame({'number':range(10),'name':list('aaabbbcccc')},index=range(20,0,-2)) # nontrivial index
>>> example
   name  number
20    a       0
18    a       1
16    a       2
14    b       3
12    b       4
10    b       5
8     c       6
6     c       7
4     c       8
2     c       9

我想设置"数字"对于第一个,例如,5行到数字19.我真正想要的是设置"数字"的最低值。到那个值,所以我先排序。 如果我的索引是微不足道的,我可以做

example.loc[:5-1,'number'] = 19 # -1 for inclusive indexing
# or 
example.ix[:5-1,'number'] = 19

但是由于它没有,这将产生以下工件(其中所有索引值最多为4):

>>> example
   name  number
20    a      19
18    a      19
16    a      19
14    b      19
12    b      19
10    b      19
8     c      19
6     c      19
4     c      19
2     c       9

使用.iloc []会很好,除了它不接受列名。

example.iloc[:5]['number'] = 19

有效,但提供了SettingWithCopyWarning。

我目前的解决方案是:

>>> example.sort_values('number',inplace=True)
>>> example.reset_index(drop=True,inplace=True)
>>> example.ix[:5-1,'number'] = 19
>>> example
  name  number
0    a      19
1    a      19
2    a      19
3    b      19
4    b      19
5    b       5
6    c       6
7    c       7
8    c       8
9    c       9

因为我必须在几个列中重复这个,所以我必须多次这样做并且每次都重置索引,这也花费了我的索引(但没关系)。

有没有人有更好的解决方案?

2 个答案:

答案 0 :(得分:3)

我会使用.iloc,因为如果重复某些索引,.loc可能会产生意外的结果。

example.iloc[:5, example.columns.get_loc('number')] = 19

答案 1 :(得分:1)

example.loc[example.index[:5], 'number'] = 19