2017-09-15 58 views
1

如何通過使用另一列(例如列C2)中的每個唯一條目來對多個列(例如,列C4,C5和C6)進行求和。例如,我想要創建一個新的數據框,通過導入和導出來摺疊列C2,並顯示C4,C5和C6的總和(最好刪除其他列C1和C3)。Python:通過另一列中的每個唯一行條目將數據框中的多個列相加

Sample Table

+1

請提供你的努力 –

+0

我已經簡化問題的一個示例代碼因爲我的實際數據集太大,但如果xdata是我的數據框,我使用ydata = xdata.sum(axis = 0)來獲得每列的總和,然後esse基本上使用ydata [C4:]來隔離總數,但顯然沒有保留列C1,C2或C3 – KSQ

回答

0

您可以使用熊貓groupby功能做到這一點

df = pd.DataFrame([['A', 'Import', 'Argentina', 1, 1, 1], 
        ['B', 'Import', 'Brazil', 2, 2, 2], 
        ['C', 'Export', 'UJ', 3, 3, 3], 
        ['D', 'Export', 'US', 4, 4, 4], 
        ['A', 'Export', 'Canada', 5, 5, 5], 
        ['B', 'Export', 'Russia', 6, 6, 6], 
        ['C', 'Import', 'China', 7, 7, 7], 
        ['D', 'Import', 'India', 8, 8, 8]], 
        columns=['C1', 'C2', 'C3', 'C4', 'C5', 'C6']) 

results = df.groupby("C2").sum() 

print(results) 

,這將給你

 C4 C5 C6 
C2     
Export 18 18 18 
Import 18 18 18 
+0

中的特定行條目進行求和的能力,這是非常有用的,正是我所缺少的。有沒有更好的方法來忽略之前不需要的列,而不是創建一個新的數據框,它是:results [C4:] – KSQ

+0

@KSQ熊貓傾向於通過在更改時創建數據框的新副本來工作,某些函數具有'inplace'選項不創建新副本。例如,要刪除出現的列,您可以執行'df.drop(['C1','C2',C3'],axis = 1,inplace = True)',這將只返回最後幾列而不創建複製。 –

+0

我明白了,謝謝Ken,這非常有幫助 – KSQ

相關問題