[英]How to transpose/pivot and group columns to rows in Pandas Dataframe?
[英]Pandas DataFrame how to group (pivot?) rows by values of specified columns, but keeping the original index?
我正在嘗試使用 Pandas 實現變量消除算法。 如果有人熟悉求和步驟,請給出一個表,其中 a、b、c 是變量(不一定是布爾值),f 是給定這些變量值的某個函數(因子)。
a b c f
0 True True True 0.015
1 True True False 0.035
2 True False True 0.270
3 True False False 0.180
4 False True True 0.030
5 False True False 0.070
6 False False True 0.240
7 False False False 0.160
我要總結f
的所有行的S其中(a,c)=(T,T)
也f
所有行的S其中(a,c)=(T,F)
(F,T)
(F,F)
。 結果看起來像
a c f
0 True True 0.285
1 True False 0.215
2 False True 0.27
3 False False 0.23
因此名稱為“sum-out ( b
)”。
我能得到的最接近的是使用pd.pivot_table(df, index=df.index.values, columns=['a', 'c'], values='f', aggfunc=np.sum, fill_value=0).sum()
返回
a c
False False xxx
True xxx
True False xxx
True xxx
另一個unstack
可以給我們
c False True
a
False xxx xxx
True xxx xxx
這仍然不是我想要的。
請注意,我可以擁有任意多個變量,以及任意多個要求和(或保留)的變量。 所以雖然在這種情況下我可以做pd.pivot_table(df, index=<some of the var left, eg a>, columns=<other var left, eg c>, values='f', aggfunc=np.sum)
為了得到相同的結果,在其他情況下可能只剩下一個變量,或者太多。
變量可能不是布爾類型,但它們應該具有有限和離散域。
另請注意,我這里的索引只是無意義的虛擬索引。 通過“保持原始索引”,我的意思是讓它們虛擬,但不知何故只沿axis=0
聚合。
另外,如果有人能提出一個更好的多維數組之類的數據結構來完成這項工作也可以。
您可以像這樣使用 groupby 和 agg 函數。
df.groupby(['a','c'])['f'].agg('sum').reset_index()
由於您不關心column 'b'
您可以刪除它,然后按列'a' and 'c'
分組,如下所示:
df1 = df[['a', 'c','f']]
df1 = df1.groupby(['a', 'c']).sum().reset_index()
這應該會返回您正在尋找的答案。 不要忘記重置結果數據幀的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.