正在尝试从以下数据框中获取数据:

          DAY    Col1    ColA    ColB    ColC
    ID
    ABC   Mon    A        123
    DEF   Mon    A        456
    GHI   Mon    A        789
    ABC   Tue    A                123
    DEF   Tue    A                456
    GHI   Tue    A                789
    ABC   Wed    A                        123
    DEF   Wed    A                        456
    GHI   Wed    A                        789


变成:

    ID    Mon    Tue    Wed
    ABC   123    123    123
    DEF   456    456    456
    GHI   789    789    789


因此,想法是删除空单元格,然后将列重新分类为唯一的Days,然后是该Day中ID的对应值。

感谢我得到的任何帮助,谢谢!

最佳答案

您可以使用:

df = (df.drop('Col1', 1)
        .set_index(['ID','DAY'])
        .stack()
        .reset_index(level=2, drop=True)
        .unstack())
print (df)
DAY    Mon    Tue    Wed
ID
ABC  123.0  123.0  123.0
DEF  456.0  456.0  456.0
GHI  789.0  789.0  789.0


说明:


通过Col1删除不必要的列drop
通过set_index创建索引
通过stack重塑形状以将NaN和列名称删除为MultiIndex
通过MultiIndex删除2级的reset_index
通过unstack重塑


编辑:

df = (df.drop('Col1', 1)
        .set_index('DAY', append=True)
        .stack()
        .reset_index(level=2, drop=True)
        .unstack()
        )
print (df)
DAY    Mon    Tue    Wed
ID
ABC  123.0  123.0  123.0
DEF  456.0  456.0  456.0
GHI  789.0  789.0  789.0


EDIT1:添加reindex

df = (df.drop('Col1', 1)
        .set_index('DAY', append=True)
        .stack()
        .reset_index(level=2, drop=True)
        .unstack()
        .reindex(columns=['Wed','Tue','Mon'])
        )
print (df)
DAY    Wed    Tue    Mon
ID
ABC  123.0  123.0  123.0
DEF  456.0  456.0  456.0
GHI  789.0  789.0  789.0

关于python - Pandas数据框-将行索引值重新排列为列标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49421753/

10-12 21:43
查看更多