将一列与另一数据框列匹配并粘贴第二个数据中的值 - Python
Posted
技术标签:
【中文标题】将一列与另一数据框列匹配并粘贴第二个数据中的值 - Python【英文标题】:Match one column with another data frame column and paste value from second data - Python 【发布时间】:2021-04-19 05:14:26 【问题描述】:我有两个数据帧,一个包含数据,第二个包含代码及其解码值。我想将 df1[code] 与 df2[code] 匹配并将 df2[value] 粘贴到 df1 中。 应该注意的是,我的第二个数据帧包含一次代码和值,它基本上是一张代码和值,但在第一个数据帧中,代码是重复的,因此将粘贴的值列应该代表每次代码出现时的值在 df1[code] 列中。
df1[code] | df2[code] | df2[value] |
---|---|---|
234 | 000 | Three |
235 | 234 | Two |
238 | 238 | Four |
337 | 235 | Five |
我需要如下:
df1[code] | df1[value] |
---|---|
234 | Two |
235 | Five |
238 | Four |
337 | Null |
基本上是从第二个数据帧转换一个数据帧中的代码。
【问题讨论】:
如果您有 2 个数据框df1
和 df2
, df1.merge(df2,on='Code')
,请查看合并。
你能显示你尝试的代码吗?
合并不起作用,因为 df1 有很多列,所以它会给出数据类型错误。
我也尝试将 df2 转换为字典。但随后匹配不会发生在 df1[code] 并且所有打印的值为 null\
【参考方案1】:
假设您的数据框如下:
df1
code something some_number
0 210 SOMETHING_28 0.206017
1 913 SOMETHING_36 0.810195
2 210 SOMETHING_18 0.258638
3 None a 0.000000
df2
code value
0 210 VALUE_01
1 590 VALUE_02
2 614 VALUE_03
3 696 VALUE_04
4 913 VALUE_05
然后,您可以使用merge
,根据需要更改code
列的类型(例如,如果它是一个字符串):
df1.code = df1.code.map(lambda x: np.int64(x) if x else np.nan).astype('Int64')
df2.code = df2.code.astype('Int64')
merged_df = df1.merge(df2, on='code', how='left')
你会得到:
code value
0 210 VALUE_01
1 913 VALUE_05
2 210 VALUE_01
3 <NA> NaN
这里是创建 df1
和 df2
的代码,其结构与此答案中显示的相同:
import pandas as pd
import numpy as np
codes = sorted(np.random.randint(1, 1000, 5))
values = [f'VALUE_x:02.0f' for x in range(1, len(codes) + 1)]
df1 = pd.DataFrame(
data=[
[c, f'SOMETHING_np.random.randint(1, 50)', np.random.random()]
for c in np.random.choice(codes, 3)
],
columns=['code', 'something', 'some_number']
)
df2 = pd.DataFrame(
data=list(zip(codes, values)),
columns=['code', 'value']
)
【讨论】:
您正在尝试合并 object 和 int64 列。如果你想继续,你应该使用 pd.concat .. 这是我得到@Piecot的错误 如果数据框与我在这里使用的不同,您应该提供一个数据框示例(及其列的实际类型)。也许你在某处有一些 nan 值...... 我已经更新了我的答案以处理code
的df1
列中的字符串和空值【参考方案2】:
如何使用 map-dict:
map_dict = dict(zip(df2['code'], df2['value']))
df1['value'] = df1['code'].map(map_dict)
【讨论】:
以上是关于将一列与另一数据框列匹配并粘贴第二个数据中的值 - Python的主要内容,如果未能解决你的问题,请参考以下文章