python - Pandas 合并数据框列
问题描述
我的输入数据框是:
df1
Grp A B C
Men 10 15 14
Women 4 6 5
Baby 3 5 15
df2
Grp Upper_A Lower_A Upper_B Lower_B Upper_C Lower_C
Men 10 1 9 2 15 2
Women 6 4 10 4 10 3
Baby 5 3 15 7 6 3
期望的输出是;
Grp Features Values Upper_values Lower_values Evaluation
Men A 10 10 1 True
Men B 15 9 2 False
Men C 14 15 2 True
Women A 4 6 4 True
Women B 6 10 4 True
Women C 5 10 6 True
Baby A 3 5 3 True
Baby B 5 15 7 False
Baby C 15 6 3 False
你能帮我解决这个问题吗?PS:评估列是根据是否在上下值之间分配的。
解决方案
解决方案是通过使用列拆分创建MultiIndex
回来并通过以下方式重塑DataFrame.stack
:
df2.columns = df2.columns.str.split('_', expand=True)
df2 = df2.stack().rename_axis(('Grp','Features'))
然后以相同的方式处理并使用第二个df1
创建一列DataFrame
,
最后用于新列:Series.to_frame
DataFrame.join
df2
Series.between
df1 = df1.rename_axis('Features', axis=1).stack().to_frame('Values')
df = df1.join(df2).reset_index()
df['Evaluation'] = df['Values'].between(df['Lower'], df['Upper'])
print (df)
Grp Features Values Lower Upper Evaluation
0 Men A 10 1 10 True
1 Men B 15 2 9 False
2 Men C 14 2 15 True
3 Women A 4 4 6 True
4 Women B 6 4 10 True
5 Women C 5 3 10 True
6 Baby A 3 3 5 True
7 Baby B 5 7 15 False
8 Baby C 15 3 6 False
推荐阅读
- javascript - 找不到模块:无法在反应应用程序中解析 node_modules\minio\dist\main 和 node_modules\mkdirp 中的“fs”
- python - 用户警告:IPython 历史需要 SQLite
- python-3.x - 如何在 xlsxwriter 中格式化空单元格的范围
- python - 如何创建一个包并导入它?
- javascript - 结合使用重复代码的方法的可能方式
- c# - 无法捕捉异常
- javascript - 反应子嵌套路由
- python - 如何在 python 字典中以某种方式更改所有键?
- selenium - 如何在 Robot Framework 中最大化 Headless Chrome 窗口?
- sql - 如何保留使用多个连接的密钥?