是否基于同一行其他列中的值将函数应用于dataframe列元素?

卡盘:

我有一个数据框:

df = pd.DataFrame(
    {'number': ['10', '20' , '30', '40'], 'condition': ['A', 'B', 'A', 'B']})

df = 
    number    condition
0    10         A
1    20         B
2    30         A
3    40         B

我想将一个函数应用于number列中的每个元素,如下所示:

 df['number'] = df['number'].apply(lambda x: func(x))

但是,即使我将函数应用于数字列,我也希望函数也引用该condition列,即使用伪代码:

func(n):
    #if the value in corresponding condition column is equal to some set of values:
        # do some stuff to n using the value in condition
        # return new value for n

对于单个数字和示例函数,我将编写:

number = 10
condition = A
def func(num, condition):
    if condition == A:
        return num*3
    if condition == B:
        return num*4

func(number,condition) = 15

如何将相同的功能合并到apply上面编写的语句中?即引用条件列中的值,同时作用于数字列中的值?

注:我已经通过对文档阅读np.where()pandas.loc()并且pandas.index()可我就是不知道怎样把它付诸实践。

我在为从函数中引用另一列的语法而苦苦挣扎,因为我需要访问numberand condition列中的值

因此,我的预期输出是:

df = 
    number    condition
0    30         A
1    80         B
2    90         A
3    160         B

更新:上面太含糊了。请参阅以下内容:

df1 = pd.DataFrame({'Entries':['man','guy','boy','girl'],'Conflict':['Yes','Yes','Yes','No']})


    Entries    Conflict
0    "man"    "Yes"
1    "guy"    "Yes"
2    "boy"    "Yes"
3    "girl"   "No

def funcA(d):
    d = d + 'aaa'
    return d
def funcB(d):
    d = d + 'bbb'
    return d

df1['Entries'] = np.where(df1['Conflict'] == 'Yes', funcA, funcB)

Output:
{'Conflict': ['Yes', 'Yes', 'Yes', 'Np'],
 'Entries': array(<function funcB at 0x7f4acbc5a500>, dtype=object)}

我如何应用上面的np.where语句来采用注释中提到的熊猫系列,并产生如下所示的所需输出:

所需输出:

    Entries    Conflict
0    "manaaa"    "Yes"
1    "guyaaa"    "Yes"
2    "boyaaa"    "Yes"
3    "girlbbb"   "No
黑场:

我不知道使用pandas.DataFrame.apply,但是您可以定义一个特定的condition:multiplier键值映射(multiplier如下所示),并将其传递给您的函数。然后,您可以使用列表推导number根据这些条件计算新的输出:

import pandas as pd
df = pd.DataFrame({'number': [10, 20 , 30, 40], 'condition': ['A', 'B', 'A', 'B']})

multiplier = {'A': 2, 'B': 4}

def func(num, condition, multiplier):
    return num * multiplier[condition]

df['new_number'] = [func(df.loc[idx, 'number'], df.loc[idx, 'condition'], 
                     multiplier) for idx in range(len(df))]

结果如下:

df
Out[24]: 
  condition  number  new_number
0         A      10          30
1         B      20          80
2         A      30          90
3         B      40         160

向量化的纯熊猫解决方案可能更“理想”。但这也很紧迫。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于应用于其他两个列的函数更改列中的值

根据其他列中的值将函数应用于列中数据框行的子集

如何将函数应用于PySpark DataFrame的指定列的每一行

将函数应用于基于其他列的 Pandas 列

将函数应用于Pandas数据框列中的每一行

使用EPPlus将公式应用于每一行的两列中的值相乘

R将函数应用于数据框的每一行,将结果存储在同一数据框的新列中

python pandas,一个函数将基于另一行的条件应用于一行中的元素组合

如何基于同一行中的其他列更新列

根据其他列(R)中的值将变换应用于向量的列

Pandas数据框基于其他列值将功能应用于列字符串

将函数应用于pandas数据框中的所有其他列

在每一行上应用函数。是否检查行中每一列的条件并应用于所有列

Pandas 通过计算多列将函数应用于每一行

如何将一行拆分为多个并将datetime应用于dataframe列?

R data.table-将函数A应用于某些列,将函数B应用于其他列

Spark:将 UDF 应用于 Dataframe 基于 DF 中的值生成新列

将功能应用于基于列的数据框以及基于索引的其他数据框

熊猫用同一行中的其他列值替换数据框值

如何将变换应用于使用其他行的每一行

将转换器模型应用于熊猫列中的每一行

在列中以列为参数将binom_test应用于每一行?

是否有用于将多列旋转到同一行的 R 函数?

Pandas 将具有相同列值的行分组并将函数应用于第一行,然后将结果分配给左行

R-将3个参数函数应用于3列矩阵的每一行,并使用3列的每个值作为参数

将函数应用于 DataFrame 中的每个单元格并包含来自特定列的值

基于检查同一行中多列的其他字符串创建附加列

从同一DataFrame中的其他行创建新的Pandas DataFrame列等于值

根据Pandas中的特定条件将值从一列复制到同一行中的其他列