python - 加入三个表并专门对 pandas 中的列进行排序
问题描述
我有三个仅相差一列的数据框。他们列出了平均值、标准差和计数,如下所示:
表格1
Name Treatment Pool_mean
ATP 1Week 100
ATP 4Week 500
ATP 16Weeks 1500
GTP 4Week 1000
GTP 1Week 250
GTP 16Weeks 12000
表 2
Name Treatment Pool_std
ATP 1Week 2
ATP 4Week 5
ATP 16Weeks 15
GTP 4Week 7
GTP 1Week 2
GTP 16Weeks 30
表3
Name Treatment Pool_count
ATP 1Week 3
ATP 4Week 5
ATP 16Weeks 4
GTP 4Week 5
GTP 1Week 3
GTP 16Weeks 4
我需要一个看起来像这样的表:
1Week 1Week 1Week 4Weeks 4Weeks 4Weeks 16Weeks 16Weeks 16 Weeks
pool_mean pool_std pool_count pool_mean pool_std pool_count pool_mean pool_std pool_count
Name ATP 100 2 3 500 5 5 1500 15 4
Name GTP 250 2 3 1000 7 5 12000 30 4
我只是不知道该怎么办。我已经写了这段代码:
df1 = pd.DataFrame(averages)
df2 = pd.DataFrame(stddev)
df3 = pd.DataFrame(count)
dfs = [df1, df2, df3]
dfs1 = pd.concat(dfs, axis=1).T.drop_duplicates().T
print(dfs1)
dfs1.to_csv('pool_merged.csv')
但它最终只是将我的列放入一个非常扁平的文件中,这很好,但不是我需要的。在这一点上我真的很迷茫(我对此很陌生)。
任何帮助将不胜感激。
解决方案
您可以尝试以下解决方案,它与 set index 和 unstack 连接,然后使用 natsort 进行交换级别和排序索引:
import natsort as ns
dfs = [df1,df2,df3]
out = (pd.concat([i.set_index(['Name','Treatment']).unstack() for i in dfs],axis=1)
.swaplevel(axis=1))
out = out.reindex(columns=ns.natsorted(out.columns.get_level_values(0).unique()),level=0)
print(out)
Treatment 1Week 4Week \
Pool_mean Pool_std Pool_count Pool_mean Pool_std Pool_count
Name
ATP 100 2 3 500 5 5
GTP 250 2 3 1000 7 5
Treatment 16Weeks
Pool_mean Pool_std Pool_count
Name
ATP 1500 15 4
GTP 12000 30 4
推荐阅读
- docker - Apache2.4.20 编译错误:/usr/bin/ld: 找不到 -lssl 和 -lcrypto
- python - 如何在固定间隔内平均一列?
- flutter - 如何在 Flutter Navigation 中使用 Bloc?
- javascript - 使用 Puppeteer 和 Node.JS 在网站上的 iFrame 中找不到隐藏的输入元素
- vue.js - 当我尝试嵌套本地组件时,为什么会出现错误 [Unknown custom element: did you register the component?]?
- reactjs - 如何动态导入图片
- php - 在 WooCommerce 中设置总订单的最小体积和重量
- javascript - 从外部 URL 读取文件
- ajax - 基于搜索栏中用户输入的不同查询参数
- python - 如何在pytorch中标准化卷积权重?