2017-01-25 196 views
1

新來大熊貓很抱歉,如果這是舊帽子。我試圖做到的是類似於被包含在grouping rows in list in pandas groupby,但我有兩個以上的列和無法弄清楚如何讓我所有的列與分組值一起顯示。這是我想要做的。大熊貓GROUPBY +列表

data = [{'ip': '192.168.1.1', 'make': 'Dell', 'model': 'UltraServ9000'}, 
{'ip': '192.168.1.3', 'make': 'Dell', 'model': 'MiniServ'}, 
{'ip': '192.168.1.5', 'make': 'Dell', 'model': 'UltraServ9000'}, 
{'ip': '192.168.1.6', 'make': 'HP', 'model': 'Thinger3000'}, 
{'ip': '192.168.1.8', 'make': 'HP', 'model': 'Thinger3000'}] 

In [2]: df = pd.DataFrame(data) 
In [3]: df 
Out[4]: 
      ip make   model 
0 192.168.1.1 Dell UltraServ9000 
1 192.168.1.3 Dell  MiniServ 
2 192.168.1.5 Dell UltraServ9000 
3 192.168.1.6 HP Thinger3000 
4 192.168.1.8 HP Thinger3000  

<magic> 

Out[?]:  
      ip    make   model 
0 192.168.1.1, 192.168.1.5 Dell UltraServ9000 
1 192.168.1.3    Dell  MiniServ 
3 192.168.1.6, 192.168.1.8 HP  Thinger3000 

感謝提前:)

+0

抱歉,這真的就是一個傻瓜:http://stackoverflow.com/questions/22219004/grouping-rows-in-list-in-pandas-groupby,基本上所有你想要的是'在[107]: df.groupby([ '一個', 'C'])[ 'b']申請(列表) 缺貨[107]: 交流 一個Foo [1,2] 乙foo的[5,5, 4] çfoo的[6] 名稱:b,D型細胞:object' – EdChum

+0

歡迎堆棧溢出。將來,請創建原始數據,以便用戶可以試驗您的數據 - 您將以這種方式獲得更好/更快的答案。另外,如果您正在構建示例,則'a'和'A'不能很好地用作列名和數據值。 – flyingmeatball

+0

嗨 - 這是非常近的副本,但我遇到了問題,因爲我有20幾家,奇數列,所以我想要做的是「A」一個GROUPBY,列表「B」,然後只顯示所有其他列的值,這些列對於每一行都是相同的。 – liam

回答

2

groupby需要一個參數,by,通過它你可以指定你想通過你的操作變量groupby一個list。所以這個問題的答案是修改如下:

df.groupby(by = ["a", "c"])["b"].apply(list).reset_index() 

編輯:看您的評論:因爲比其他a所有列的值相同,你可以很容易地在by參數列表,因爲他們不會影響結果。爲了節省您的時間和避免你實際鍵入的所有名稱,你可以做這樣的事情:

df.groupby(by = list(set(df.columns) - set(["b"])))["b"].apply(list).reset_index() 

或者,你可以通過傳遞一個字典攻擊的agg功能,所有列將採取maxb將返回列表:

aggregate_functions = {x: max for x in df.columns if x != "a" and x != "b"} 
aggregate_functions["b"] = lambda x: list(x) 
df.groupby(by = "a").agg(aggregate_functions) 

你更喜歡哪一個取決於你,可能後者更具可讀性。

+0

謝謝!這與我正在尋找的接近,並且與上面鏈接的幾乎重複的鏈接非常相​​似。我應該指定我不只有三列(A,B,C),我有20個。我試圖將其分組,然後只顯示其餘的列,就像它們對於每一行都是相同的。 – liam

+0

對不起,我誤解了這個問題。看我的編輯。 – Mikk

+0

完全是我的錯。我仍然試圖圍繞熊貓包裹頭腦,顯然失去了這場戰鬥。我已經更新了上面的示例,希望能夠更有用。對困惑感到抱歉! – liam