2017-03-11 220 views
0

我想在分組數據幀中的每一列打印唯一值獲取唯一值和預期下面的代碼段無法正常工作:大熊貓在每列

df = pd.DataFrame({'a' : [1, 2, 1, 2], 'b' : [5, 5, 5, 5], 'c' : [11, 12, 13, 14]}) 
print(
    df.groupby(['a']).apply(
    lambda df: df.apply(
     lambda col: col.unique(), axis=0)) 
) 

我期望它print

1 [5] [11, 13] 
2 [5] [12, 14] 

雖然還有其他方法可以這樣做,但我想了解這種方法有什麼問題。有任何想法嗎?

回答

2

這應該做的伎倆:

print(df.groupby(['a', 'b'])['c'].unique()) 

a | b | 
--+---+--------- 
1 | 5 | [11, 13] 
2 | 5 | [12, 14] 

至於有什麼錯你的方法 - 當你groupbydf然後apply一些功能f,爲f輸入將與所有的df'一個數據幀除非另有說明(如我的代碼片段['c'])。所以你的第一個apply傳遞一個DataFrame 3列,所以你的第二個apply。然後你的函數also_print遍歷這3列中的每一列並將它們打印出來,所以你可以爲每個組獲得3個打印。

+0

這不會做我想要的不幸,我只想按'a'分組,然後在每個組中獲得每列中的唯一值,就像我在上面給出的預期輸出一樣。 – iggy

+0

也忘記了關於also_print函數,我從問題中刪除它,因爲它沒有關係。問題是關於最終的數據框。 – iggy

+0

這個怎麼樣? (df.columns [1:]],index = df.columns [1: ]))' –