使用wide_to_long时,如何解决“ id变量需要唯一标识每一行”的问题?

时间:2019-05-02 07:29:21

标签: python pandas dataframe

这是此one

的后续帖子

请找到MCVE here

我的数据框类似于以下内容:

ID    Date   ColA1   ColB1   ColA2   ColB2   ColA3   ColB3 
id1   date1   1        2      3        4       5       6      
id2   date2   7        8      9        10      11      12

我想拆分列ColA2ColB2ColA3ColB3,然后将它们作为行再次合并到数据集中(并仍然保留{{1} }和ID

预期输出:

Date

我都尝试过 ID Date ColA ColB id1 date1 1 2 id1 date1 3 4 id1 date1 5 6 id2 date2 7 8 id2 date2 9 10 id2 date2 11 12

pd.wide_to_long(df, stubnames = ['ColA', 'ColB'], i = ['ID', 'Date'], j = 'value').reset_index([0,1])

但是仍然出现相同的错误,说pd.wide_to_long(df.reset_index(), stubnames = ['ColA', 'ColB'], i = ['ID', 'Date'], j = 'value').reset_index(drop=True)

我也已经用the id variables need to uniquely identify each row尝试了方法here,但仍然遇到相同的问题。

我猜这个问题来自我的特定数据集。但是我不知道它有什么问题以及如何解决它,以解决此问题。你有什么建议吗?

请让我知道我可以做什么来解决此问题。谢谢!

1 个答案:

答案 0 :(得分:0)

这两行都没有出现任何错误,只需使用双reset_index即可达到您想要的结果:

df = (pd.wide_to_long(df, stubnames=['ColA','ColB'], i=['ID','Date'], j='value')
        .reset_index([0,1])
        .reset_index(drop=True))

print(df)
    ID   Date  ColA  ColB
0  id1  date1     1     2
1  id1  date1     3     4
2  id1  date1     5     6
3  id2  date2     7     8
4  id2  date2     9    10
5  id2  date2    11    12