python - 将 pandas DataFrame 列添加到行的最佳方法
问题描述
我必须找到使用现有 DataFrame 创建新 DataFrame 的最佳方法。
查看此链接以获取完整代码:jdoodle.com/a/xKP
我有这种 DataFrame :
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 并带有一个 stat 的函数:
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
推荐阅读
- logrotate - 仅使用 maxage 进行 Logrotate
- python - 如何确定(使用终端)正在安装哪个版本的 python pip(MacOS)
- swift - OSX 中的 SwiftUI 自定义文本字段
- node.js - 在 AWS 上的 NGINX Web 服务器上运行的 NodeJS 中无法找出 504 错误
- java - Gradle:无法实例化 SLF4J LoggerFactory 错误
- amazon-web-services - 进出 AWS Api Gateway 的不同响应
- javascript - 如何向非营利网站添加捐赠功能?
- python - Django 不在数据库中存储密码
- go - 在不知道它们的类型的情况下比较来自两个接口的结构字段?
- azure - Azure 应用服务自定义域 - 网站功能不同