數據:
df = pd.DataFrame(
{'Score': [0.65, 0.57, 0.56, 0.689, 0.56, 0.85, 0.45, 0.15, 0.14, 0.4678],
'ID': ['AAA', 'BBB', 'SAS', 'SAP', 'TCS', 'BBB', 'CTC', 'CTC', 'CTC', 'CTC'],
'Sample': ['AE01', 'AE01', 'AE03', 'AE03', 'AE03', 'AE05', 'AE05', 'AE05', 'AE05', 'AE05'],
'Freq': [1, 14, 14, 15, 16, 17, 18, 19, 20, 21],
'Type': ['Non', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND']},
columns=['Sample','ID','Type','Score','Freq'])
print (df)
Sample ID Type Score Freq
0 AE01 AAA Non 0.6500 1
1 AE01 BBB IND 0.5700 14
2 AE03 SAS IND 0.5600 14
3 AE03 SAP IND 0.6890 15
4 AE03 TCS IND 0.5600 16
5 AE05 BBB IND 0.8500 17
6 AE05 CTC IND 0.4500 18
7 AE05 CTC IND 0.1500 19
8 AE05 CTC IND 0.1400 20
9 AE05 CTC IND 0.4678 21
orig = pd.pivot_table(df,index=["ID",'Type'],values=['Sample'],
aggfunc={'Sample':np.size})
print (orig)
Sample
ID Type
AAA Non 1
BBB IND 2
CTC IND 4
SAP IND 1
SAS IND 1
TCS IND 1
我想你需要換Sample
和Type
,而是values=['Sample']
使用values=['Freq']
,但似乎你可以使用不用於index
一些列,因爲使用aggfunc=len
(同作爲aggfunc='size'
)
table_pat_rel1 = pd.pivot_table(df,index=["ID",'Sample'],values=['Freq'],aggfunc=len) \
.reset_index(level=1) \
.rename(columns={'Freq':'Recurrence'}) \
.set_index('Recurrence', append=True)
print (table_pat_rel1)
Sample
ID Recurrence
AAA 1 AE01
BBB 1 AE01
1 AE05
CTC 4 AE05
SAP 1 AE03
SAS 1 AE03
TCS 1 AE03
或使用groupby
與聚集size
:
table_pat_rel2 = df.groupby(['ID','Sample']) \
.size() \
.reset_index(level=1) \
.rename(columns={0:'Recurrence'}) \
.set_index('Recurrence', append=True)
print (table_pat_rel2)
Sample
ID Recurrence
AAA 1 AE01
BBB 1 AE01
1 AE05
CTC 4 AE05
SAP 1 AE03
SAS 1 AE03
TCS 1 AE03
您好感謝您的解決方案,但我已經編輯了我的輸出,你可以請現在 – user1017373
謝謝。爲什麼是BBB兩次?是錯字嗎? – jezrael
似乎有一行BBB丟失。 – jezrael