2015-12-02 33 views
0

我有以下形式的DataFrame分組一個數據幀和應用元組

df = pd.DataFrame({('a','A'):[3,4,5,6], 
       ('a','B'):[1,1,3,5], 
       ('b','A'):[9,7,0,3], 
       ('b','B'):[2,0,1,6] 
       }) 

看起來像這樣:

通過使用下面的命令第二級 ​​

I組它:

grouped = df.groupby(level=1,axis=1) 

並獲得:

Group A 
________ 
    a b 
    A A 
0 3 9 
1 4 7 
2 5 0 
3 6 3 


Group B 
________ 
    a b 
    B B 
0 1 2 
1 1 0 
2 3 1 
3 5 6 

如何獲取每個組的兩列,並將它們按行排列成一個元組並將其轉換爲新的DataFrame。基本上我試圖讓這個:

A  B 
0 (3,9) (1,2) 
1 (4,7) (1,0) 
2 (5,0) (3,1) 
3 (6,3) (5,6) 

我一直在試圖

grouped.apply(lambda x : tuple(x)) 

但它不會做的工作,而是給我列名的元組。有沒有簡單的方法來做到這一點,而不訴諸for循環?

+0

你不使用循環慾望暗示你有興趣的表現。如果你對性能感興趣,那麼你不應該把元組放在DataFrame中,因爲元組不是本地的NumPy dtype。如果你堅持使用NumPy dtypes(例如'int64's),DataFrame中的算術運算將會更快。 – unutbu

回答

1

嘗試

grouped.apply(lambda x: pd.Series([tuple(i) for i in x.values])) 
+0

我想你需要一個')'末 – johnchase

+0

謝謝!這完全按照我想要的方式工作。 – JavNoor

+0

不客氣,很高興你接受了答案。 – Stefan

0

這似乎這樣的伎倆:

grouped.apply(lambda x: pd.Series(list(x.itertuples(index=False))))