根据另一列中的值对列中数据帧行的子集应用函数

2024-04-23 09:09:14 发布

您现在位置:Python中文网/ 问答频道 /正文

熊猫是新来的,所以请容忍我。在

我有一个文本处理函数,我想在datafame中的一列上运行,条件是另一列中的值。我见过

根据某个对象是否被标记,我想对其运行翻译函数。在

   account  article    ... translation  flag
0    123      text      ...               1
1    123      text      ...               0
2    123      text      ...               1

我试过了:

df['translation'] = df[['flag', 'text']].apply(lambda x: translate(['article']) if ['flag'] == 1 else None)

作为回报:

^{pr2}$

任何帮助或指导将不胜感激。在


Tags: 对象lambda函数text标记dfarticleaccount
2条回答

IIUC,你可以试试map和{}

df['translation'] = df['article'].map(translate).where(df['flag'].eq(1), None)

我使用了一个类似于您的测试数据帧,没有翻译列:

   account article  flag
0      123   text1     1
1      123   text2     0
2      123   text3     1

然后我定义了一个“代理”函数:

^{pr2}$

要有条件地调用它,请运行:

df['translation'] = df.apply(lambda row:
    translate(row.article) if row.flag == 1 else None, axis=1)

结果是:

   account article  flag translation
0      123   text1     1     _text1_
1      123   text2     0        None
2      123   text3     1     _text3_

您的代码有什么问题:

  1. 如果要将源数据限制为列的子集,请使用existing 列名(article而不是text)并包括使用的所有列 在应用函数中。

  2. lambda函数应用于每个,因此您应该传递 轴=1参数(默认0)。

  3. 调用函数时,当前作为参数传递 (x),但要引用其中的某个列,您应该使用x.column\u name 符号。E、 g.我的解决方案也可以是:

    df[['article', 'flag']].apply(lambda row:
        translate(row.article) if row.flag == 1 else None, axis=1)
    
  4. ['article']这样的参数在这里只是一个包含一个列表的 word(文章)。我怀疑你的翻译功能是否能 处理列表参数。

  5. 关于if['flag']的类似评论。。。。这是不是参考 源行中的列。

相关问题 更多 >