python - 将 pandas DataFrame 列添加到行的最佳方法

标签 python pandas dataframe reshape

<分区>

我必须找到使用现有 DataFrame 创建新 DataFrame 的最佳方法。

查看此链接以获得完整代码:jdoodle.com/a/xKP

我有这种数据框:

df = pd.DataFrame({'length': [112, 214, 52,88], 'views': [10000, 50000, 25000,5000], 'click': [55, 64, 85,9]},
     index = ['id1', 'id2', 'id3','id4'])

     click  length  views
id1     55     112  10000
id2     64     214  50000
id3     85      52  25000
id4      9      88   5000

并且需要得到这样的结果:

    type_stat   stat
id1     click     55
id2     click     64
id3     click     85
id4     click      9
id1    length    112
id2    length    214
id3    length     52
id4    length     88
id1     views  10000
id2     views  50000
id3     views  25000
id4     views   5000

目前,我创建了一个返回带有一个统计数据的 DataFrame 的函数:

def df_by_stat(current_df,stat):
    current_df['type_stat'] = stat
    current_df['stat'] = current_df[stat].astype(int)

    return current_df[['type_stat','stat']]

在我用这样的函数制作一个.append之后:

def final():
    return df_by_stat(df,'click').append(
    df_by_stat(df,'length')).append(
    df_by_stat(df,'views'))

print(final())

这种方法可行,但它的复杂性取决于行和列的基数,太昂贵了。 这就是为什么我需要你的帮助来找到最好的方法。

最佳答案

使用 pandas.melt在将您的索引提升到一个系列之后:

res = pd.melt(df.assign(index=df.index), id_vars='index',
              value_name='stat', var_name='type_stat')\
        .set_index('index')

print(res)

      type_stat   stat
index                 
id1       click     55
id2       click     64
id3       click     85
id4       click      9
id1      length    112
id2      length    214
id3      length     52
id4      length     88
id1       views  10000
id2       views  50000
id3       views  25000
id4       views   5000

关于python - 将 pandas DataFrame 列添加到行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50952916/

相关文章:

python - 如何在 Gevent 中实现多生产者、多消费者范式?

python - Django ORM仅获取外键关系中的字段

python - 为什么我得到 None 值,并且为什么该数字仍在 Python 中打印?

python - Pandas:向分类数据框添加一列

python - 通过比较值而不是列名称来合并两个数据框

python - pyparsing 删除一些文本以及如何使用空格捕获文本

python - 读取具有键值对的文本文件,并使用 python pandas 将每一行转换为一个字典

python - 索引 Pandas 数据帧 : integer rows, 命名列

r - 在循环中减去列

python - 为什么类别列被视为 pandas 中的字符串列?