[英]Transforme a dataframe with a column for each value within a column in pandas
我有一個數據框,例如:
Groups Species_1 Species_2
G1 SP1_A SP1
G1 SP1B SP1
G1 SP2_AZ SP2
G1 SP3_12:A SP3
G1 SP4-2 SP4
G2 SP1_2 SP2
G2 SP3:21 SP3
G3 SP5(2) SP5
我想為每個Species_2
值創建一個新的數據框,並在其中為每個Groups
添加一個具有相應Species_1
值的行。
如果有多個Species_1
,我用;
分隔它們。 在G1-SP1示例中的單元格中。
然后我應該得到以下結果;
Groups SP1 SP2 SP3 SP4 SP5
G1 SP1_A;SP1B SP2_AZ SP3_12:A SP4-2 NA
G2 NA SP1_2 SP3:21 NA NA
G3 NA NA NA NA SP5(2)
如果有幫助,這里是 dict 格式的數據框:
{'Groups': {0: 'G1', 1: 'G1', 2: 'G1', 3: 'G1', 4: 'G1', 5: 'G2', 6: 'G2', 7: 'G3'}, 'Species_1': {0: 'SP1_A', 1: 'SP1B', 2: 'SP2_AZ', 3: 'SP3_12:A', 4: 'SP4-2', 5: 'SP1_2', 6: 'SP3:21', 7: 'SP5(2)'}, 'Species_2': {0: 'SP1', 1: 'SP1', 2: 'SP2', 3: 'SP3', 4: 'SP4', 5: 'SP2', 6: 'SP3', 7: 'SP5'}}
非常感謝你的幫助
嘗試這個:
df1 = df.groupby(['Groups', 'Species_2'], as_index=False).agg({'Species_1': lambda x: ';'.join(x)})
df1
> Groups Species_2 Species_1
0 G1 SP1 SP1_A;SP1B
1 G1 SP2 SP2_AZ
2 G1 SP3 SP3_12:A
3 G1 SP4 SP4-2
4 G2 SP2 SP1_2
5 G2 SP3 SP3:21
6 G3 SP5 SP5(2)
df1.pivot(index='Groups', columns=['Species_2'], values='Species_1')
>Species_2 SP1 SP2 SP3 SP4 SP5
Groups
G1 SP1_A;SP1B SP2_AZ SP3_12:A SP4-2 NaN
G2 NaN SP1_2 SP3:21 NaN NaN
G3 NaN NaN NaN NaN SP5(2)
嘗試使用pivot_table
out =df.pivot_table(index ='Groups', columns = 'Species_2',values = 'Species_2',aggfunc = ';'.join).reset_index()
Out[73]:
Species_2 Groups SP1 SP2 SP3 SP4 SP5
0 G1 SP1_A;SP1B SP2_AZ SP3_12:A SP4-2 NaN
1 G2 NaN SP1_2 SP3:21 NaN NaN
2 G3 NaN NaN NaN NaN SP5(2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.