Ich glaube, Sie brauchen unstack
:
df1 = df.set_index(['Samples','Type']).unstack()
print (df1)
variable value
Type Beta FPKM Beta FPKM
Samples
PE01I 267N12.3_Beta 267N12.3_FPKM 0.066517 0.000000
PE01R R267N12.3_Beta 267N12.3_FPKM 0.061617 0.003430
PE02I 267N12.3_Beta 267N12.3_FPKM 0.071013 0.272144
PE02R 267N12.3_Beta 267N12.3_FPKM 0.056623 0.005753
PE03I 267N12.3_Beta 267N12.3_FPKM 0.071633 0.078708
#remove Multiindex in columns
df1.columns = ['_'.join(col) for col in df1.columns]
df1.reset_index(inplace=True)
print (df1)
Samples variable_Beta variable_FPKM value_Beta value_FPKM
0 PE01I 267N12.3_Beta 267N12.3_FPKM 0.066517 0.000000
1 PE01R R267N12.3_Beta 267N12.3_FPKM 0.061617 0.003430
2 PE02I 267N12.3_Beta 267N12.3_FPKM 0.071013 0.272144
3 PE02R 267N12.3_Beta 267N12.3_FPKM 0.056623 0.005753
4 PE03I 267N12.3_Beta 267N12.3_FPKM 0.071633 0.078708
#if need remove column
print (df1.drop('variable_FPKM', axis=1))
Samples variable_Beta value_Beta value_FPKM
0 PE01I 267N12.3_Beta 0.066517 0.000000
1 PE01R R267N12.3_Beta 0.061617 0.003430
2 PE02I 267N12.3_Beta 0.071013 0.272144
3 PE02R 267N12.3_Beta 0.056623 0.005753
4 PE03I 267N12.3_Beta 0.071633 0.078708
EDIT by Kommentar:
Wenn Fehler erhalten:
ValueError: Index contains duplicate entries, cannot reshape
Es bedeutet, dass Sie doppelte Werte in index
haben und Aggrating ist notwendig.
Sie benötigen pivot_table
und wenn aggfunc np.sum
oder np.mean
(Arbeiten mit numerisch) ist, String-Spalten sind omited und Funktion ''.join
nur mit String-Werte und numerische Arbeiten sind omited.
Anruffunktion zweimal mit verschiedenen aggfunc
und dann concat
verwenden:
import pandas as pd
df = pd.DataFrame({'Type': {0: 'Beta', 1: 'Beta', 2: 'Beta', 3: 'Beta', 4: 'Beta', 5: 'FPKM', 6: 'FPKM', 7: 'FPKM', 8: 'FPKM', 9: 'FPKM'}, 'value': {0: 0.066516999999999993, 1: 0.061616999999999998, 2: 0.071012999999999993, 3: 0.056623, 4: 0.071633000000000002, 5: 0.0, 6: 0.0034299999999999999, 7: 0.272144, 8: 0.0057530000000000003, 9: 0.078708}, 'variable': {0: '267N12.3_Beta', 1: 'R267N12.3_Beta', 2: '267N12.3_Beta', 3: '267N12.3_Beta', 4: '267N12.3_Beta', 5: '267N12.3_FPKM', 6: '267N12.3_FPKM', 7: '267N12.3_FPKM', 8: '267N12.3_FPKM', 9: '267N12.3_FPKM'}, 'Samples': {0: 'PE01I', 1: 'PE01I', 2: 'PE02I', 3: 'PE02R', 4: 'PE03I', 5: 'PE01I', 6: 'PE01R', 7: 'PE02I', 8: 'PE02R', 9: 'PE03I'}})
#changed value in second row in column Samples
print (df)
Samples Type value variable
0 PE01I Beta 0.066517 267N12.3_Beta
1 PE01I Beta 0.061617 R267N12.3_Beta
2 PE02I Beta 0.071013 267N12.3_Beta
3 PE02R Beta 0.056623 267N12.3_Beta
4 PE03I Beta 0.071633 267N12.3_Beta
5 PE01I FPKM 0.000000 267N12.3_FPKM
6 PE01R FPKM 0.003430 267N12.3_FPKM
7 PE02I FPKM 0.272144 267N12.3_FPKM
8 PE02R FPKM 0.005753 267N12.3_FPKM
9 PE03I FPKM 0.078708 267N12.3_FPKM
df1 = df.pivot_table(index='Samples', columns=['Type'], aggfunc=','.join)
print (df1)
variable
Type Beta FPKM
Samples
PE01I 267N12.3_Beta,R267N12.3_Beta 267N12.3_FPKM
PE01R None 267N12.3_FPKM
PE02I 267N12.3_Beta 267N12.3_FPKM
PE02R 267N12.3_Beta 267N12.3_FPKM
PE03I 267N12.3_Beta 267N12.3_FPKM
df2 = df.pivot_table(index='Samples', columns=['Type'], aggfunc=np.mean)
print (df2)
value
Type Beta FPKM
Samples
PE01I 0.064067 0.000000
PE01R NaN 0.003430
PE02I 0.071013 0.272144
PE02R 0.056623 0.005753
PE03I 0.071633 0.078708
df3 = pd.concat([df1, df2], axis=1)
df3.columns = ['_'.join(col) for col in df3.columns]
df3.reset_index(inplace=True)
print (df3)
Samples variable_Beta variable_FPKM value_Beta value_FPKM
0 PE01I 267N12.3_Beta,R267N12.3_Beta 267N12.3_FPKM 0.064067 0.000000
1 PE01R None 267N12.3_FPKM NaN 0.003430
2 PE02I 267N12.3_Beta 267N12.3_FPKM 0.071013 0.272144
3 PE02R 267N12.3_Beta 267N12.3_FPKM 0.056623 0.005753
4 PE03I 267N12.3_Beta 267N12.3_FPKM 0.071633 0.078708
Verwendung der 'where' Funktion – Julien