Pandas: Flipping df-wide-values and index?



我试图以这种方式翻转值和索引:

df = pd.DataFrame({"day1":{"JOHN":"A","JANE":"B","JILL":"C"},"day2":{"JOHN":"A","JANE":"C","JILL":np.nan},"day3":{"JOHN":"C","JANE":"A","JILL":"B"}})
df
day1   day2    day3
JOHN    A      A       C
JANE    B      C       A
JILL    C    NaN       B

寻找:

day1    day2    day3
A    JOHN    JOHN    JANE
B    JANE    NaN     JILL
C    JILL    JANE    JOHN

我不知道如何解决这个问题。我的思想不知怎么地跳跃到旋转,但我哪儿也去不了。

感谢

使用DataFrame.stack将MultiIndex的第一级转换为列,0将列附加到Index,因此可以使用Series.unstack进行转置:

df = df.stack().reset_index(level=0).set_index(0, append=True)['level_0'].unstack().T
print (df)
day1  day2  day3
0                  
A  JOHN  JOHN  JANE
B  JANE   NaN  JILL
C  JILL  JANE  JOHN

或者使用DataFrame.melt将索引转换为列,然后使用DataFrame.pivot删除缺失的值:

df = df.reset_index().melt('index').dropna().pivot('value','variable','index')
print (df)
variable  day1  day2  day3
value                     
A         JOHN  JOHN  JANE
B         JANE   NaN  JILL
C         JILL  JANE  JOHN

最新更新