[英]Add columns to a pivot table (pandas)
我知道在 RI 中可以使用 tidyr 進行以下操作:
data_wide <- spread(data_protein, Fraction, Count)
和 data_wide 將從 data_protein 繼承所有未傳播的列。
Protein Peptide Start Fraction Count
1 A 122 F1 1
1 A 122 F2 2
1 B 230 F1 3
1 B 230 F2 4
變成
Protein Peptide Start F1 F2
1 A 122 1 2
1 B 230 3 4
但是在熊貓(Python)中,
data_wide = data_prot2.reset_index(drop=True).pivot('Peptide','Fraction','Count').fillna(0)
不繼承函數中未指定的任何內容(索引、鍵、值)。 因此,我決定通過 df.join() 加入它:
data_wide2 = data_wide.join(data_prot2.set_index('Peptide')['Start']).sort_values('Start')
但這會產生重復的肽,因為有幾個起始值。 有沒有更直接的方法來解決這個問題? 或者省略重復的連接的特殊參數? 提前謝謝你。
試試這個:
In [144]: df
Out[144]:
Protein Peptide Start Fraction Count
0 1 A 122 F1 1
1 1 A 122 F2 2
2 1 B 230 F1 3
3 1 B 230 F2 4
In [145]: df.pivot_table(index=['Protein','Peptide','Start'], columns='Fraction').reset_index()
Out[145]:
Protein Peptide Start Count
Fraction F1 F2
0 1 A 122 1 2
1 1 B 230 3 4
您還可以明確指定Count
列:
In [146]: df.pivot_table(index=['Protein','Peptide','Start'], columns='Fraction', values='Count').reset_index()
Out[146]:
Fraction Protein Peptide Start F1 F2
0 1 A 122 1 2
1 1 B 230 3 4
spread
被pivot_wider
中的tidyr
取代。
如何使用datar
遵循tidyr
的API設計:
>>> from datar.all import f, tribble, pivot_wider
>>> data_protein = tribble(
... f.Protein, f.Peptide, f.Start, f.Fraction, f.Count,
... 1, "A", 122, "F1", 1,
... 1, "A", 122, "F2", 2,
... 1, "B", 230, "F1", 3,
... 1, "B", 230, "F2", 4,
... )
>>> data_wide = pivot_wider(data_protein, names_from=f.Fraction, values_from=f.Count)
>>> data_wide
Peptide Protein Start F1 F2
0 A 1 122 1 2
1 B 1 230 3 4
我是包的作者。 如果您有任何問題,請隨時提交問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.