鱼C论坛

 找回密码
 立即注册
查看: 1231|回复: 2

[已解决]两个df之间关联,以某列数值进行更新字段数据

[复制链接]
发表于 2023-10-28 12:32:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Snipaste_2023-10-28_12-25-01.png
如图所示:
两个dataframe,
将df1中的列2数值按照df2中的num数据进行更新,关联字段是列1=code
最佳答案
2023-10-28 12:33:27
在Python的pandas库中,你可以使用merge或者map函数来实现这个需求。以下是一个示例:

首先,我们创建两个示例dataframe:
import pandas as pd

# 创建df1
data1 = {'列1': ['a', 'b', 'c', 'd', 'e'],
         '列2': [1, 2, 3, 4, 5]}
df1 = pd.DataFrame(data1)

# 创建df2
data2 = {'code': ['a', 'b', 'c', 'd', 'e'],
         'num': [10, 20, 30, 40, 50]}
df2 = pd.DataFrame(data2)

然后,我们可以使用merge函数将df1和df2合并,然后更新df1的'列2':
# 合并df1和df2
df = df1.merge(df2, left_on='列1', right_on='code', how='left')

# 更新df1的'列2'
df['列2'] = df['num']

# 删除不需要的列
df = df.drop(['code', 'num'], axis=1)

或者,我们也可以使用map函数来更新df1的'列2':
# 使用map函数更新df1的'列2'
df1['列2'] = df1['列1'].map(df2.set_index('code')['num'])

以上两种方法都可以实现你的需求,你可以根据你的实际情况选择使用哪一种。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-28 12:33:22 | 显示全部楼层
您可以使用 pandas 库中的 merge 函数将两个DataFrame按照关联字段进行合并,然后使用 map 函数将df2中的num数据映射到df1中的列2,并进行更新。

下面是一个示例代码:
import pandas as pd

# 创建示例数据
data1 = {'code': ['A', 'B', 'C', 'D'],
         'value': [1, 2, 3, 4]}
df1 = pd.DataFrame(data1)

data2 = {'code': ['A', 'C'],
         'num': [10, 30]}
df2 = pd.DataFrame(data2)

# 将df1和df2按照code字段进行合并
merged_df = pd.merge(df1, df2, on='code', how='left')

# 使用map函数将df2中的num数据映射到df1中的value列,并进行更新
merged_df['value'] = merged_df['num'].map(lambda x: x if pd.notnull(x) else merged_df['value'])
merged_df.drop('num', axis=1, inplace=True)  # 删除num列

# 打印更新后的结果
print(merged_df)

运行以上代码,输出的结果将是更新后的DataFrame,其中df1中的value列按照df2中的num数据进行了更新。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-28 12:33:27 | 显示全部楼层    本楼为最佳答案   
在Python的pandas库中,你可以使用merge或者map函数来实现这个需求。以下是一个示例:

首先,我们创建两个示例dataframe:
import pandas as pd

# 创建df1
data1 = {'列1': ['a', 'b', 'c', 'd', 'e'],
         '列2': [1, 2, 3, 4, 5]}
df1 = pd.DataFrame(data1)

# 创建df2
data2 = {'code': ['a', 'b', 'c', 'd', 'e'],
         'num': [10, 20, 30, 40, 50]}
df2 = pd.DataFrame(data2)

然后,我们可以使用merge函数将df1和df2合并,然后更新df1的'列2':
# 合并df1和df2
df = df1.merge(df2, left_on='列1', right_on='code', how='left')

# 更新df1的'列2'
df['列2'] = df['num']

# 删除不需要的列
df = df.drop(['code', 'num'], axis=1)

或者,我们也可以使用map函数来更新df1的'列2':
# 使用map函数更新df1的'列2'
df1['列2'] = df1['列1'].map(df2.set_index('code')['num'])

以上两种方法都可以实现你的需求,你可以根据你的实际情况选择使用哪一种。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-28 23:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表