通过两列的合并来重新索引熊猫数据框

时间:2019-09-17 11:51:01

标签: python pandas

可能是重复的,但我什至不知道要搜索什么。

如果我有一个像这样的熊猫数据框:

index RH  LH  Data1  Data2 . . . 
1     A1  A2  A      B
2     B1  NaN C      D
3     NaN C2  E      F

我想这样重新编制索引:

index Data1  Data2
A1    A      B
A2    A      B
B1    C      D
C2    E      F

是否有一种简单的方法?还是我应该做一对for循环?

1 个答案:

答案 0 :(得分:2)

您可以对列表中未定义名称的所有列使用DataFrame.set_index并用DataFrame.stack进行整形,然后用DataFrame.reset_index删除drop=True的最后一个级别,将所有其他级别转换为列并按DataFrame.set_index创建索引:

cols = df.columns.difference(['RH','LH']).tolist()
df = (df.set_index(cols)
        .stack()
        .reset_index(len(cols), drop=True)
        .reset_index(name='idx')
        .set_index('idx'))
print (df)
    Data1 Data2
idx            
A1      A     B
A2      A     B
B1      C     D
C2      E     F

或将DataFrame.meltDataFrame.dropna一起使用,删除列variable并最后由idx列创建索引:

df = (df.melt(cols, value_name='idx')
       .dropna(subset=['idx'])
       .drop('variable', axis=1)
       .set_index('idx'))
print (df)
    Data1 Data2
idx            
A1      A     B
B1      C     D
A2      A     B
C2      E     F