我想爲pandas DataFrame的前n行設置一些值。設置爲大熊貓的第一行DataFrame
>>> 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
而且因爲我不得不重複這幾個欄目,我每次都,這也花了我我的索引來此做了幾次,重置索引(但不要介意)。
有沒有人有一個更好的解決方案?
這隻適用於索引不重複的情況。 example = pd.DataFrame({'number':range(10),'name':list('aaabbbcccc')},index = range(10,0,-2)* 2) example.loc [例子。 index [:5],'number'] = 19 將無法按預期工作,它將設置爲重複索引。 – ErnestScribbler
@ErnestScribbler你試過了嗎?首先,你沒有指定你的索引是不唯一的。這通常是你想要包括在你的例子中,如果它是你所關心的東西。其次,我運行了一個重複索引的例子,它運行良好。第三,如果你堅持'example.loc [example.index [:5] .unique(),'number'] = 19' – piRSquared