python - 将字符串解析为过滤 Pandas 数据框的条件

标签 python string pandas operators

嗨,我有一个 pandas 数据框,我有一个 A 列。

data = pandas.DataFrame()
data['A']= [numpy.random.choice([1,2,3,4,5,6]) for i in range(10)]

我想在 A 上添加 B 列条件(当 A =1 然后 B=0,当 A>5 然后 B=1)而不是使用:

data.loc[data['A']==1,'B']=0
data.loc[data['A']>5, 'B']=1

这里我想创建一个函数来执行此操作,给定条件作为字典:{'A=1':0,'A>5':1} 所以我可以使用 add_column({'A=1': 0,'A>5':1}, 'B') 来执行上面的代码。我认为与运营商打交道很棘手,有什么好主意吗?

def add_column(condition_dict, NewColumnName):
    pass

最佳答案

虽然可能有有效的方法,但一种可能的方法是使用 eval 函数。

创建输入df:

import pandas as pd
import numpy as np

data = pd.DataFrame()
data['A']= [np.random.choice([1,2,3,4,5,6]) for i in range(10)]
print(data)

输入df:

   A
0  4
1  3
2  3
3  1
4  1
5  2
6  3
7  6
8  2
9  1

现在,创建了一个函数,它迭代 dataframecondition_dict 的每一行,当row 评估匹配 value 存储在相应行的列表中,该行已为 新列 更新。如果所有条件都不匹配,则默认情况下它将 None:

def add_column(df, condition_dict, NewColumnName):
    new_values = []
    for index, row in df.iterrows():
        # if none of the condition matches then put default value
        default_value = None
        # iterate through each condition to check if any matches
        for key, value in condition_dict.items():
            expression = 'row.' + key
            if(eval(expression)):
                default_value = value
        # add corresponding rows new value for new column        
        new_values.append(default_value)

    df[NewColumnName] = new_values

现在,调用函数:

add_column(data, {'A==1':0, 'A>5':1}, 'B')
print(data)

输出:

   A    B
0  4  NaN
1  3  NaN
2  3  NaN
3  1  0.0
4  1  0.0
5  2  NaN
6  3  NaN
7  6  1.0
8  2  NaN
9  1  0.0

关于python - 将字符串解析为过滤 Pandas 数据框的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44937009/

相关文章:

python - 如何从整数列表中选择几个最大值?

python - 以图形方式(GUI)测试像 jsfiddle 这样的 Python 脚本

java - 不区分大小写的输入和任何改进建议

Python Pandas 不读取 csv 文件的第一行

python - SciKit-学习 : Basic PCA Confusion

python - 如何在 django 中访问媒体文件

java - 如何在避免 NoSuchElementException 错误的同时获取可选值?

java - 如何为 GNU/Linux 设置正确的字符编码

python - 如何使用 pandas 和 scikit-learn 在 Python 中进行简单的主成分分析?

python - 如何拆分字符串并指定为 pandas 数据框的列名称?