python - 如何转换和组合两个 DataFrame
问题描述
我正在尝试将数据框列分配给.loc
函数的行和列。我有一个df
没有设置索引的 DataFrame,Sites
并Visits
作为我的列标题
指数 | 地点 | 访问 |
---|---|---|
0 | 101 | 访问 1 |
1 | 102 | 访问 1 |
2 | 102 | 访问 2 |
我有另一个数据框作为我的数据框索引,df2
作为我的列作为我的值。Sites
Visits
Cost
指数 | 访问 1 | 访问 2 |
---|---|---|
101 | 50 | 60 |
102 | 100 | 120 |
我正在尝试使用索引.loc
fromCost
并将df2
其添加为列df1
指数 | 地点 | 访问 | 成本 |
---|---|---|---|
0 | 101 | 访问 1 | 50 |
1 | 102 | 访问 1 | 60 |
2 | 102 | 访问 2 | 120 |
我尝试使用以下代码提供行和列值
df['Cost'] = df2.loc[df['Site'],df['Visit']]
但我收到以下错误:
KeyError: "Passing list-likes to .loc or [] with any missing labels is no longer supported.
The following labels were missing: etc. etc.
知道如何将一个 DataFrame 中的两列值用作.loc
行值和列值吗?
解决方案
- 这是一个关于合并的问题,但是应该转换数据框,以便正确合并它们。
转换数据框
df2
通过堆叠转换为单个列,并使用相邻列中的'Visit 1'
值'Visit 2'
- 从技术上讲,不需要重命名列,如下所示。但是,我认为它在创建时更容易
.merge()
import pandas as pd
# create df1
df1 = pd.DataFrame({'Index': ['0', '1', '2'], 'Site': ['101', '102', '102'], 'Visit': ['Visit 1', 'Visit 1', 'Visit 2']})
# drop the Index column
df1.drop(columns=['Index'], inplace=True)
# display(df1)
Site Visit
0 101 Visit 1
1 102 Visit 1
2 102 Visit 2
# create df2
df2 = pd.DataFrame({'Index': ['101', '102'], 'Visit 1': ['50', '100'], 'Visit 2': ['60', '120']})
# display(df2)
Index Visit 1 Visit 2
0 101 50 60
1 102 100 120
# stack Visit 1 and Visit 2 into a single column
df2 = df2.set_index('Index').stack().reset_index()
# rename the columns
df2.columns = ['Site', 'Visit', 'Cost']
# display(df2)
Site Visit Cost
0 101 Visit 1 50
1 101 Visit 2 60
2 102 Visit 1 100
3 102 Visit 2 120
合并数据框
cost = df1.merge(df2, on=['Site', 'Visit'])
# display(cost)
Site Visit Cost
0 101 Visit 1 50
1 102 Visit 1 100
2 102 Visit 2 120
推荐阅读
- swift - 如何使用 SwiftUI 显示 UIImage?
- angular - 适用于多种角度环境的 Azure Devops
- html - 如何根据 django 中的查询创建用于提供多个对象条目的表单?
- spring - 从 ftp 读取大型 csv 文件时,Spring 集成堆空间错误
- vb.net - 在生产环境中部署后如何修复 System.InvalidCastException
- video - 如何使按钮(或矩形)浮动在 Corona SDK 中来自摄像头的实时视频上
- android - 我正在尝试在我的 android 应用程序中获取实时数据股票价格,是否可以通过改造来获取实时数据
- sql - 如何在 C# 中加入 linq?
- c# - 在 ViewComponant 中调用 IdentityUser?
- python - 为什么这个 python 代码只产生最后一个结果