可能是重复的,但我什至不知道要搜索什么。
如果我有一个像这样的熊猫数据框:
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
循环?
答案 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.melt
与DataFrame.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