[英]Pandas dataframe convert multiple rows and columns to single row[key] and column[key]
我有一个 pandas dataframe 需要转换为具有User ID, MovieId, Rating
的电影镜头类型。 我拥有的 dataframe 呈密集形式
import numpy as np
import pandas as pd
d={'user_id':[1,2], 'col1': [1, np.nan], 'col2': [np.nan, 4], 'col3': [np.nan, 3]}
df=pd.DataFrame(data=d)
我想要它的形式:
user_id feature value
0 1.0 col1 1.0
1 1.0 col2 NaN
2 1.0 col3 NaN
3 2.0 col1 NaN
4 2.0 col2 4.0
5 2.0 col3 3.0
我写了一个小 function 来完成这个:
def func(df_x):
df_temp=pd.DataFrame()
for index, row in df_x.iterrows():
for cols in df_x.columns:
if 'user_id' in cols:
continue
d_n={'user_id':row['user_id'], 'feature': cols, 'value': row[cols]}
df_temp = df_temp.append(pd.DataFrame(d_n, index=[0]), ignore_index=True)
return df_temp
这似乎适用于小型数据集,但对于较大的数据集,这种方法似乎需要很长时间。 对于我拥有的 14500 * 60 数据集,笔记本电脑上的单元格在整夜运行后完成执行(在我的 16GB 笔记本电脑上)。 你能建议一个最佳的方法来处理这个吗?
尝试使用melt
然后sort_values
out = df.melt('user_id').sort_values('user_id')
Out[397]:
user_id variable value
0 1 col1 1.0
2 1 col2 NaN
4 1 col3 NaN
1 2 col1 NaN
3 2 col2 4.0
5 2 col3 3.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.