我無法打破數據框,應用計算並將其重新組合在一起。將數據框分解爲組,應用計算並重新合併爲一個數據框
這是我的數據框的樣子:
Priority ID Name Coverage Group
1 1000 Name 1 33 Group A
2 1001 Name 2 67 Group A
3 1002 Name 3 100 Group A
4 1003 Name 4 33 Group B
5 1004 Name 5 67 Group B
6 1005 Name 6 100 Group B
7 1006 Name 7 33 Group C
8 1007 Name 8 67 Group C
9 1008 Name 9 100 Group C
我想創建一個新的「有效範圍」一欄,因爲我目前的「覆蓋」一欄是累積性的每個「小組」。例如,作爲「A組」的一部分的「名稱3」實際上具有33(100-67)的覆蓋範圍。
,我希望獲得最後的結果是這樣的:
Priority ID Name Coverage Group Effective Coverage
1 1000 Name 1 33 Group A 33
2 1001 Name 2 67 Group A 34
3 1002 Name 3 100 Group A 33
4 1003 Name 4 33 Group B 33
5 1004 Name 5 67 Group B 34
6 1005 Name 6 100 Group B 33
7 1006 Name 7 33 Group C 33
8 1007 Name 8 67 Group C 34
9 1008 Name 9 100 Group C 33
這是我到目前爲止有:
for group in groups:
effective_coverage = [df[df['group']==group].coverage.iloc[0]]
for i in range(1,len(df[df['group']==group].placementID)):
ecov = df[df['group']==group].coverage.iloc[i] - df[df['group']==group].coverage.iloc[i-1]
effective_coverage.append(ecov)
effective_coverage = pd.Series(effective_coverage, name='effective_coverage')
print effective_coverage
df[df['group']==group] = df[df['group']==group].join(effective_coverage)
print df[df['group']==group]
我知道這個邏輯我把計算有效覆蓋範圍是正確的,因爲對於每個組,它都會打印出33,34,33的正確有效範圍。
然而,當我嘗試加入有效覆蓋系列,並打印出組只是一個數據幀,它只是返回:
Priority ID Name Coverage Group
1 1000 Name 1 33 Group A
2 1001 Name 2 67 Group A
3 1002 Name 3 100 Group A
而且沒有成功加入我的新計算出的有效覆蓋。
這裏有什麼想法嗎?我是一個大的Python noob,所以我很樂意聽到更優雅的方法來完成這個,如果任何人有一個。
謝謝約翰,我不太瞭解什麼情況下創建函數並將其應用於DataFrame是有意義的,但此解決方案絕對是一種更簡潔的方法。 – ploo