Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于多个if-else条件的python列_Python_Python 2.7_Pandas_Data Manipulation - Fatal编程技术网

基于多个if-else条件的python列

基于多个if-else条件的python列,python,python-2.7,pandas,data-manipulation,Python,Python 2.7,Pandas,Data Manipulation,我的pandas数据框中有4列,列名称(比如A、B、C、D)分别映射到UI中的一个字段。每个都有自己的目的,但是用户在字段A或B或C或D中输入字段A信息。我试图清理数据并将其带到A列进行分析。因此,如果A列中有任何值,我不关心B、C或D列中的值。但是如果A列中没有值,那么我必须在其他列中查找用户条目并将其带到A列。A列的实际值将始终以列表中的一些值开始。因此,如果A列中没有数据,那么我们必须查找B列中的值,看看它是否有我们列表中的值,然后将它带到A,如果B列也是空的,或者如果它有我们列表中的值以

我的pandas数据框中有4列,列名称(比如A、B、C、D)分别映射到UI中的一个字段。每个都有自己的目的,但是用户在字段A或B或C或D中输入字段A信息。我试图清理数据并将其带到A列进行分析。因此,如果A列中有任何值,我不关心B、C或D列中的值。但是如果A列中没有值,那么我必须在其他列中查找用户条目并将其带到A列。A列的实际值将始终以列表中的一些值开始。因此,如果A列中没有数据,那么我们必须查找B列中的值,看看它是否有我们列表中的值,然后将它带到A,如果B列也是空的,或者如果它有我们列表中的值以外的其他值,则将其保留,并在C列中检查相同的值,类似于在D列中。在python中如何做到这一点

如果有什么不清楚的地方,请告诉我

例如

mylist = ['senior','junior','midlevel']

inputdf

 A        B      C          D
senior  male   senior     UK
        senior candidate  USA
        female junior     
junior  male   junior     AU
        male   candidate  midlevel
        female candidate  AU


Outputdf,

A           B        C         D
senior     male     senior     UK
senior     senior  candidate   USA
junior     female  junior  
junior     male    junior      AU
midlevel   male    candidate  midlevel
           female  candidate  AU

您可以使用
apply
函数迭代df并将值返回到列“A”

def func(row):
    for index_val, series_val in row.iteritems():
        if (series_val in mylist):
            return series_val
df['A']=df.apply(func,axis=1)


此代码检查
A
中的值是否存在于
mylist
中。如果是,则返回该值,否则继续检查
B
,依此类推。

谢谢。但是,在某些情况下,mylist值会多次出现,例如,A列中没有值,B列中的值为junior,C列中的值为junior。在这种情况下,这将在A列中写入重复项。我们如何避免它在第一次找到后检查更多列。返回值后,它不会进行任何重复比较。一旦执行return语句,循环就中断,函数不再进行任何比较。如果您仍然面临问题,那么您可以添加更多示例(在运行代码之前和之后)。谢谢。明白了,但我得到了不同的错误-AttributeError:(“'Series'对象没有属性'columns'”。我认为apply函数一次只向函数传递一列。您好,谢谢,我解决了这个问题。我在s.iteritems()中使用了
作为索引值,序列值):如果mylist中的series\u val返回series\u val
。因为apply函数将每一行作为一个包含元组的序列传递。请在您的答案中对此进行更新,然后我将接受它。我已进行了更改。