如何在 pandas 数据帧上交换索引和值
How to swap index and values on pandas dataframe
我有一些数据,其中索引是一个阈值,值是两个 classes,0 和 1 的 trns(真阴性率)。
我想为每个 class 获取一个数据帧,由 tnr 索引,对应于该 tnr 的阈值。本质上,我想要这个:
我可以使用以下方法实现此效果:
pd.concat([pd.Series(data[0].index.values, index=data[0]),
pd.Series(data[1].index.values, index=data[1])],
axis=1)
或者,推广到任意数量的列:
def invert_dataframe(df):
return pd.concat([pd.Series(df[col].index.values,
index=df[col]) for col in df.columns],
axis=1)
但是,这似乎非常老套且容易出错。有没有更好的方法来做到这一点,是否有本机 Pandas 功能可以做到这一点?
data = pd.DataFrame({0:[10,20,31],10:[4,22,36],
1:[7,5,6]}, index=[2.1,1.07,2.13])
print (data)
0 1 10
2.10 10 7 4
1.07 20 5 22
2.13 31 6 36
df = data.stack().reset_index()
df.columns = list('abc')
df = df.pivot(index='c', columns='b', values='a')
print (df)
b 0 1 10
c
4 NaN NaN 2.10
5 NaN 1.07 NaN
6 NaN 2.13 NaN
7 NaN 2.10 NaN
10 2.10 NaN NaN
20 1.07 NaN NaN
22 NaN NaN 1.07
31 2.13 NaN NaN
36 NaN NaN 2.13
我有一些数据,其中索引是一个阈值,值是两个 classes,0 和 1 的 trns(真阴性率)。
我想为每个 class 获取一个数据帧,由 tnr 索引,对应于该 tnr 的阈值。本质上,我想要这个:
我可以使用以下方法实现此效果:
pd.concat([pd.Series(data[0].index.values, index=data[0]),
pd.Series(data[1].index.values, index=data[1])],
axis=1)
或者,推广到任意数量的列:
def invert_dataframe(df):
return pd.concat([pd.Series(df[col].index.values,
index=df[col]) for col in df.columns],
axis=1)
但是,这似乎非常老套且容易出错。有没有更好的方法来做到这一点,是否有本机 Pandas 功能可以做到这一点?
data = pd.DataFrame({0:[10,20,31],10:[4,22,36],
1:[7,5,6]}, index=[2.1,1.07,2.13])
print (data)
0 1 10
2.10 10 7 4
1.07 20 5 22
2.13 31 6 36
df = data.stack().reset_index()
df.columns = list('abc')
df = df.pivot(index='c', columns='b', values='a')
print (df)
b 0 1 10
c
4 NaN NaN 2.10
5 NaN 1.07 NaN
6 NaN 2.13 NaN
7 NaN 2.10 NaN
10 2.10 NaN NaN
20 1.07 NaN NaN
22 NaN NaN 1.07
31 2.13 NaN NaN
36 NaN NaN 2.13