你好,我有一個數據框,我試圖通過索引來加減行。一個乾淨/高效的方式,通過在python熊貓中的索引來加總行
先在容易複製格式的數據:
data = [['Name1','Obj1','Ind1',10,5,3,6],['Name1','Obj1','Ind2',10,5,2,1],['Name1','Obj1','Ind3',10,5,5,2],['Name1','Obj2','Ind1',15,7,33,15],['Name1','Obj2','Ind2',15,7,15,9],['Name1','Obj2','Ind3',15,7,32,9]]
然後數據幀:
>>> df = pd.DataFrame(data,columns=['Name','Object','Index','Const1','Const2','Method1','Method2'])
>>> df
Name Object Index Const1 Const2 Method1 Method2
0 Name1 Obj1 Ind1 10 5 3 6
1 Name1 Obj1 Ind2 10 5 2 1
2 Name1 Obj1 Ind3 10 5 5 2
3 Name1 Obj2 Ind1 15 7 33 15
4 Name1 Obj2 Ind2 15 7 15 9
5 Name1 Obj2 Ind3 15 7 32 9
這是一個截斷DF只有有一個「名稱」,但在現實DF可以有很多。儘管「指數」僅限於幾個值。在這種有限的情況下,我想通過「名稱」和「對象」分組來操作「方法」列,然後採取Ind1-Ind2-Ind3
。
我這樣做的原始的方式如下:
>>> for ind in ['Ind2','Ind3']:
... for meth in ['Method1','Method2']:
... df[meth][df['Index']==ind] *= -1
...
>>> df
Name Object Index Const1 Const2 Method1 Method2
0 Name1 Obj1 Ind1 10 5 3 6
1 Name1 Obj1 Ind2 10 5 -2 -1
2 Name1 Obj1 Ind3 10 5 -5 -2
3 Name1 Obj2 Ind1 15 7 33 15
4 Name1 Obj2 Ind2 15 7 -15 -9
5 Name1 Obj2 Ind3 15 7 -32 -9
df['Const1'] /= 3
df['Const2'] /= 3
>>> df.groupby(['Name','Object']).sum()
Const1 Const2 Method1 Method2
Name Object
Name1 Obj1 10 5 -4 3
Obj2 15 7 -14 -3
是否有使用Python熊貓這樣做的更好的辦法?
你兩個'DataFrame's是不同的...你可以發佈你實際使用的那個嗎?你在'Const1'中有10和15,在'Const2'中有5和7,但是你提供的那個在這兩列中分別只有10和5。 –
啊,是的,我已經糾正了數據。我試圖證明'Const'值是恆定的,不應該改變。這些值在每個組內都是一樣的。 – Daniel
我的答案適用於您的任一數據集。 –