Python 删除列并为每个删除的列创建唯一的行
这是我遇到的一个非常棘手的问题,它严重影响了我的内存管理,以下是设置: 我有一个具有以下列设置的数据框:Python 删除列并为每个删除的列创建唯一的行,python,pandas,dataframe,Python,Pandas,Dataframe,这是我遇到的一个非常棘手的问题,它严重影响了我的内存管理,以下是设置: 我有一个具有以下列设置的数据框: Unique1 Unique2 Unique3 d_1 d_2 d_3..... d_2000 A B C 1 4 0 100 我想删除d_1…d_2000列,而是为每个条目创建一个唯一的行: Unique1 Unique2 Unique3 d_index d_value A B C d_
Unique1 Unique2 Unique3 d_1 d_2 d_3..... d_2000
A B C 1 4 0 100
我想删除d_1…d_2000列,而是为每个条目创建一个唯一的行:
Unique1 Unique2 Unique3 d_index d_value
A B C d_1 1
A B C d_2 4
A B C d_3 0
.
.
.
A B C d_2000 100
下面的代码为我提供了一个2-dim系列,可以将其压缩到数据帧中,但由于我需要使用一些工作变量,因此它在linux上很快就耗尽了32gb的ram(在windows环境下工作,但速度非常慢):
有哪位专业人士能想出更好的方法(用python)来实现这一点
谢谢
输入示例:
Unique1 Unique2 Unique3 d_1 d_2 d_3
A B C 1 4 0
D E F 5 9 12
示例输出:
Unique1 Unique2 Unique3 d_index d_value
A B C d_1 1
A B C d_2 4
A B C d_3 0
D E F d_1 5
D E F d_2 9
D E F d_3 12
我重新创建了数据帧,如下所示:
import pandas as pd
n = 2000
df = pd.DataFrame(columns=['Unique' + str(i) for i in range(1,4)]
+ ['d_' + str(i) for i in range(n)],
data= [['A','B','C'] + np.random.randint(0,100,n).astype(str).tolist()],
index = [0])
然后确定您正在使用的列:
d_cols = df.columns[df.columns.str.contains('d_')]
u_cols = df.columns[df.columns.str.contains('Unique')]
然后生成第二个数据帧:
df2 = pd.DataFrame({'d_index':d_cols,
'd_value': df[d_cols].values.flatten()})
for col in u_cols:
df2[col] = df[col][0]
熊猫有一个解决方案:
请分享几行,可能是5行,代表你的数据。任何解决方案都可以扩展到更大的datasetExample!谢谢你!干杯
df2 = pd.DataFrame({'d_index':d_cols,
'd_value': df[d_cols].values.flatten()})
for col in u_cols:
df2[col] = df[col][0]
df.melt(id_vars=['Unique1','Unique2','Unique3'],
var_name='d_index',
value_name='d_value')
.sort_values('Unique1', ignore_index=True)
Unique1 Unique2 Unique3 d_index d_value
0 A B C d_1 1
1 A B C d_2 4
2 A B C d_3 0
3 D E F d_1 5
4 D E F d_2 9
5 D E F d_3 12