繁体   English   中英

Pandas dataframe 将多行和多列转换为单行[key]和列[key]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM