/ / Python pandas: fait pivoter certaines variables dans DataFrame sous forme large

Pandas Python: pivotent certaines variables dans DataFrame sous forme large

Question de collecte de données: comment pivoter de manière sélective certaines variables d'un DataFrame trop large?

Par exemple, je voudrais tourner:

df1 = pd.DataFrame(
[[1,"a","b",.1,-1,10],
[2,"a","b",.2,-3,12],
[3,"c","d",.3,-5,14]],
columns=["sample","id1","id2","x","y1","y2"])
print df1
#   sample id1 id2    x  y1  y2
#0       1   a   b  0.1  -1  10
#1       2   a   b  0.2  -3  12
#2       3   c   d  0.3  -5  14

dans:

#   sample id  position    x   y
#0       1  a         1  0.1  -1
#1       1  b         2  0.1  10
#2       2  a         1  0.2  -3
#3       2  b         2  0.2  12
#4       3  c         1  0.3  -5
#5       3  d         2  0.3  14

Notez que x est copié et que y est aligné avec la position.

Une suite pd.melt() crée des variables et des types de données mixtes qui ne peuvent pas facilement pivoter de manière sélective dans un format large.

print pd.melt(df1, id_vars="sample")
#    sample variable value
#0        1      id1     a
#1        2      id1     a
#2        3      id1     c
#3        1      id2     b
#4        2      id2     b
#5        3      id2     d
#6        1        x   0.1
#7        2        x   0.2
#8        3        x   0.3
#9        1       y1    -1
#10       2       y1    -3
#11       3       y1    -5
#12       1       y2    10
#13       2       y2    12
#14       3       y2    14

Aucun conseil? Merci!

Réponses:

3 pour la réponse № 1

Vous pouvez essayer ceci:

# set columns that don"t change as index
df1.set_index(["sample", "x"], inplace=True)

# create multi-index columns based on the names pattern
df1.columns = pd.MultiIndex.from_arrays(df1.columns.str.extract(r"(D+)(d+)", expand=True).T.values)

# transform the multi-index data frames to long format with stack
df1.stack(level=1).rename_axis(("sample", "x", "position")).reset_index()

entrer la description de l'image ici