Python 熊猫:如何(干净地)取消分割同一类别的两列?
我正在尝试取消Pivot数据框中的两列。我所寻求的转变与之相反 我们从如下数据集开始: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
将熊猫作为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