2016-11-01 26 views
2

我需要一個包含每個索引的所有特定元素列的列表。例如,該數據幀:從Pandas DataFrame獲取元素列的列表

>>> df 
        1   2   3   4   5 
2016-01-27   A   B   B   I   I 
2016-03-07   A   C   D   U   U 
2016-04-12   H   A   V   V   V 
2016-05-02   B   L   Y   S   N 
2016-05-23   L   N   N   A   S 

輸入「A」我想有這個名單作爲輸出:

[1,1,2,NaN,4] 

是否有此內置的方法?

編輯:在原始表格中,一行中的所有項目都是獨一無二的,當編輯原始表格時,使其不太「密集」在這裏發佈,我犯了這個錯誤,對不起。

+1

你想輸入的*第一*指數? 'B'會爲第1行返回什麼? – brianpck

+0

在原表中,連續的所有項目都是唯一的,對不起,我編輯了原始表格,使它在這裏發佈時不那麼「密集」,我犯了這個錯誤。 –

回答

2

您可能希望將數據幀melt長格式,然後計算出列的每個輸入(值)相應的列表,獲得系列如下後,這將是您輕鬆地查詢任何結果意輸入:

import pandas as pd 
pd.melt(df).groupby('value').variable.apply(list) 

#value 
#A [1, 1, 2, 4] 
#B  [1, 2, 3] 
#C    [2] 
#D    [3] 
#H    [1] 
#I   [4, 5] 
#L   [1, 2] 
#N  [2, 3, 5] 
#S   [4, 5] 
#U   [4, 5] 
#V  [3, 4, 5] 
#Y    [3] 
#Name: variable, dtype: object 

要獲得列的列表輸入A

result = pd.melt(df).groupby('value').variable.apply(list) 

result['A'] 
# ['1', '1', '2', '4'] 
+0

這很好,但有沒有辦法在行中沒有**'A'**時獲得**「NaN」**值? –

+0

保證每行最多隻有一個「A」?如果它有多個As呢?你想保留哪一個? – Psidom

+0

是的,一行中的所有項目都是唯一的,我在編輯表格的時候犯了這個錯誤,在這裏看起來不那麼「密集」,我只是編輯了原文。 –