[英]Python Pandas groupby multiple columns and append
多虧了Python Pandas Groupby/Append 列,我已經接近實現我想要的目標,但仍然不完全存在。
東風:
城市 | 計划 | 問題 1 | 問題 2 | 問題 3 |
---|---|---|---|---|
熱那亞 | 服務1 | 啊啊啊 | bbb | ccc |
熱那亞 | 服務 2 | ddd | zzz | 年年 |
熱那亞 | 服務 3 | ggg | 公私合營 | jjj |
威尼斯 | 服務 2 | lll | vvv | |
威尼斯 | 服務 3 | eee | fff | 嗯 |
預期 Output:
城市 | 問題 1 | 問題 2 | 問題 3 | 問題 4 | 問題 5 | 問題 6 | 問題 7 | 問題 8 | 問題 9 |
---|---|---|---|---|---|---|---|---|---|
熱那亞 | 啊啊啊 | bbb | ccc | ddd | zzz | 年年 | ggg | 公私合營 | jjj |
威尼斯 | lll | vvv | eee | fff | 嗯 |
基本上我想:
在從鏈接的解決方案中使用 unstack 和 cumcount 玩了一段時間之后,我仍然缺少一些東西來尊重 Plan 列的順序,如果缺少服務則用空單元格填充。
這是我正在使用的代碼:
import pandas as pd
df = pd.read_csv('input.csv')
df1 = df.set_index('City').stack().reset_index(name='vals')
df1['g'] = 'Param' + df1.groupby('City').cumcount().add(1).astype(str)
df1 = df1.pivot(index='City', columns='g', values='vals')
df1.to_csv('output.csv')
在我的測試中,我從輸入中刪除了Plan列,但問題是在對 output 中的參數進行排序后,例如,如果一個城市只有Service 3 ,它們仍然在Service 1下對齊。
這是一個 pivot 問題,但您也可以通過堆疊和取消堆疊來做到這一點:
s = df.set_index(['City', 'Plan']).stack().unstack([1, 2])
s.columns = 'Problem ' + pd.RangeIndex(1, s.shape[1]+1).astype(str)
print (s)
Problem 1 Problem 2 Problem 3 Problem 4 Problem 5 Problem 6 Problem 7 Problem 8 Problem 9
City
Genoa aaa bbb ccc ddd zzz yyy ggg ppp jjj
Venice NaN NaN NaN lll vvv NaN eee fff mmm
另一種使用melt
的方法:
s = df.melt(['City', 'Plan']).pivot('City', ['Plan', 'variable'], 'value')
s.columns = 'Problem ' + pd.RangeIndex(1, s.shape[1]+1).astype(str)
print (s)
Problem 1 Problem 2 Problem 3 Problem 4 Problem 5 Problem 6 Problem 7 Problem 8 Problem 9
City
Genoa aaa ddd ggg bbb zzz ppp ccc yyy jjj
Venice NaN lll eee NaN vvv fff NaN NaN mmm
排序有點不同,但服務之間的相對排序被保留了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.