2014-01-12 41 views
2

我有一個如下所示的數據框。我想要做的是創建一個基於索引VALUE的另一列(因此任何少於10的列都會有另一列並被標記爲「小」)。我可以像lengthDF[lengthDF.index < 10]那樣獲得我想要的值,但是我確定如何獲得我想要的額外列。我試過這Create Column with ELIF in Pandas,但無法讓它讀取索引...Python熊貓根據索引的值創建列

   LengthFirst LengthOthers 
0    1   NaN 
4   NaN    1 
9   NaN    1 
13   NaN    1 
17   1    1 
18   NaN    1 
19   NaN    1 
20   1   NaN 
21   1    1 
22   3    4 
23   1   NaN 
24   7    6 
25   1    2 
26   16   19 
27   1    2 
28   24    8 
29   9   12 
30   73   65 
31   15   12 
32   55   60 
33   28   21 
34   29   31 

回答

2

是這樣的?

lengthDF['size'] = 'large' 
lengthDF['size'][lengthDF.index < 10] = 'small' 
+0

是的,工作,謝謝。我仍然試圖找出熊貓切片和索引。問題:有沒有辦法將其作爲一個班輪或功能?假設我想同時製作三個小桶,中等,大桶? – RedRaven

+2

您可以使用地圖功能。像lengthDF ['size'] = lengthDF.index.map(lambda x:'small'如果x <10 else'large')。很顯然,你可以使用一個更復雜的命名函數來代替lambda表達式,該函數根據每個索引值返回任意數量的值(例如'small','medium','large')。如果性能是一個問題,你可能想要運行一些測試:我不確定地圖函數是否是矢量化的,所以在上面的回答中做幾個遍可能會更快,而不是使用map來完成線。 – capitalistcuttle

+0

退房numpy.where,是做這種事情更簡潔的方式。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html – qwwqwwq