当前位置: 首页 > 知识库问答 >
问题:

熊猫:添加新列并按条件从另一个数据帧赋值

阳航
2023-03-14

我有两个数据帧DF1和DF2

DF1:

id      product
a       a
b       b
c       c
d       d

DF2:

id      documentType      documentUrl
a       3D                https://...a.dxf
a       Image             https://...a.jpg
b       PDF               https://...b.pdf
b       Image             https://...b.jpg
b       Image             https://...b2.jpg
c       PDF               https://...c.pdf

我想在DF1中创建一列“image1”,并根据以下条件赋值。

  1. 检查DF1['id']值是否在DF2['id']和DF2['documentType']=='Image'中可用

因此,输出应该如下所示:

id      product      image1
a       a            https://...a.jpg
b       b            https://...b.jpg
c       c            https://...no_image.jpg
d       d            https://...no_image.jpg

不知道如何解决这个问题,但一些想法:

-加入/合并是我的第一个想法,但是如何处理这些条件呢?

-可能使用检查条件的功能映射/应用

DF1['image1'] = DF1['id'].map(DF2.set_index('id')['documentUrl'], condition)

共有1个答案

康赞
2023-03-14

您可以先过滤:

s = (DF2.loc[DF2.documentType=='Image']
        .drop_duplicates('id')
        .set_index('id')['documentUrl']
    )
DF1['image'] = DF1['id'].map(s)

输出:

  id product             image
0  a       a  https://...a.jpg
1  b       b  https://...b.jpg
2  c       c               NaN
3  d       d               NaN
 类似资料:
  • 假设我有2个数据帧: DF1: Col1 | Col2 | Col3 XCN000370/17-18C|XCN0003711718C|0003971718 DF2 Col1 | Col2 | Col3 XCN0003711718C|XCN0003711718C|0003971718 我希望它们像这样合并: 首次匹配Col1(DF1)和Col1(DF2) 在保持不匹配的情况下,将Col1(DF1)与

  • 我有点被困在提取一个变量的值和另一个变量的条件上。例如,以下数据帧: 当时,如何获取的值?每次提取的值时,都会得到一个对象,而不是字符串。

  • 我有这种熊猫。数据框。“a”、“b”是获得“x”和“y”时的条件。 我需要绘制关于相同条件的(x,y)结肠的折线图。预期结果图为: 当然,这个图像是由以下代码手动给出的: 我的问题是,当获得一个包含条件列x和y的数据帧时,如何动态地绘制如上所述的图。 列名是固定的。但是,条件列的值是动态更改的。因此,我不能使用10、20、100、200的值。 如果我有下面的“用a和b过滤”方法,我认为问题解决了:

  • 我有两个Dataframes一个与日期集(df1)和另一个与emp_ids集(df2)。我试图创建一个新的Dataframe,这样df2中的每个emp_id都被标记为df1中的每个日期。 下面给出了我的数据帧的外观 df1 df2 预期产出: 我将日期列转换为字符串,并尝试执行以下操作,但返回的数据框为空 我尝试做

  • 我对熊猫很陌生,我想知道如何同时给熊猫添加多个列。感谢您的帮助。理想情况下,我想一步到位,而不是多步重复。。。

  • 问题内容: 我有点被困在提取另一个变量的条件变量的值上。例如,以下数据框: 如何获得when的价值?每当我提取的值时,我都会得到一个对象,而不是字符串。 问题答案: 您可以用来获取满足条件的序列,然后获取第一个元素: