Python 熊猫:如何(干净地)取消分割同一类别的两列?

Python 熊猫:如何(干净地)取消分割同一类别的两列?,python,pandas,dataframe,melt,Python,Pandas,Dataframe,Melt,我正在尝试取消Pivot数据框中的两列。我所寻求的转变与之相反 我们从如下数据集开始: 将熊猫作为pd导入 将numpy作为np导入 df_orig=pd.DataFrame(data=np.random.randint(255,size=(4,5)), 列=[“精度”、“时间”、“时间”、“内存”、“内存”]) 德福奥里格 准确时间\u a时间\u b内存\u a内存\u b 0 6 118 170 102 239 1 241

我正在尝试取消Pivot数据框中的两列。我所寻求的转变与之相反

我们从如下数据集开始:

将熊猫作为pd导入
将numpy作为np导入
df_orig=pd.DataFrame(data=np.random.randint(255,size=(4,5)),
列=[“精度”、“时间”、“时间”、“内存”、“内存”])
德福奥里格
准确时间\u a时间\u b内存\u a内存\u b
0         6     118     170       102       239
1       241       9     166       159       162
2       164      70      76       228       121
3       228     121     135       128        92
我希望取消激活
mwmory
time
列,从而在结果中获得此数据集:

df
准确度记忆类别时间
06102A118
1241 159 a 9
2 164 228 a 70
3228 128 a 121
12 6 239 b 170
13241162B166
14164 121 b 76
15228 92 b 135
到目前为止,我已经使用
df.melt()
两次以及一些额外的命令获得了所需的输出:

df=df_orig.copy()
#取消PIVOT内存列
df=df.melt(id_vars=['accurity'、'time_a'、'time_b'],
value_vars=['memory_a'、'memory_b'],
值\u name='memory',
var_name='mem_cat')
#取消Pivot时间列
df=df.melt(id_vars=['accurity'、'memory'、'mem_cat'],
value_vars=['time_a','time_b'],
值\u name='time',
var\u name='time\u cat')
#仅保留“a”/“b”作为类别
df.mem_cat=df.mem_cat.str[-1]
df.time_cat=df.time_cat.str[-1]
#只保留类别匹配的列(脏!)
df=df[df.mem\u cat==df.time\u cat]
#删除重复的类别列。
df=df.drop(columns='time_cat').rename(columns={“mem_cat”:'category'})
考虑到解决这个问题是多么容易,我相信我的代码太复杂了。有人能做得更好吗?

使用:

np.random.seed(123)
df_orig = pd.DataFrame(data=np.random.randint(255, size=(4,5)),
                       columns=['accuracy','time_a','time_b','memory_a', 'memory_b'])


df = (pd.wide_to_long(df_orig.reset_index(), 
                     stubnames=['time','memory'],
                     i='index',
                     j='category',
                     sep='_',
                     suffix='\w+')
          .reset_index(level=1)
          .reset_index(drop=True)
          .rename_axis(None))
print (df)
  category  accuracy  time  memory
0        a       254   109      66
1        a        98   230      83
2        a       123    57     225
3        a       113   126      73
4        b       254   126     220
5        b        98    17     106
6        b       123   214      96
7        b       113    47      32