Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
Python 基于多个条件创建Dataframe列_Python_Python 3.x_Pandas - Fatal编程技术网

Python 基于多个条件创建Dataframe列

Python 基于多个条件创建Dataframe列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在尝试根据代码中显示的多个条件创建一个新列。 我有一本jp_hol字典,里面有日本的假日,我的数据框有一个日期列,它是一个字符串,还有函数中使用的所有其他列 然而,我在下面遇到了这个错误。有人能帮我解决这个问题吗 级数的真值是模糊的。使用a.empty,a.bool(), a、 item()、a.any()或a.all() 我的代码: def flag(): if (load['date'].isin([i for i in jp_hol.keys()]) |(load['day_o

我正在尝试根据代码中显示的多个条件创建一个新列。 我有一本jp_hol字典,里面有日本的假日,我的数据框有一个日期列,它是一个字符串,还有函数中使用的所有其他列 然而,我在下面遇到了这个错误。有人能帮我解决这个问题吗

级数的真值是模糊的。使用a.empty,a.bool(), a、 item()、a.any()或a.all()

我的代码:

def flag():
    if (load['date'].isin([i for i in jp_hol.keys()]) |(load['day_of_week_int']==6)):
         l='holiday'
    elif load['day_of_week_int'].isin([i for i in range(0,5)]): 
         l='weekday'
    elif load['day_of_week_int']==5:
         l='sat'
return l
load['flag']=load.apply(flag(),axis=1

注意:如果假日在工作日,则假日应优先于工作日。

所有掩码创建
True
False
序列,因此可以使用:

样本:

load = pd.DataFrame({'A':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'F':list('aaabbb')})

print (load)
m1 = load['B'] == 5
m2 = load['C'] >5
m3 = load['F'] == 'a'

print (pd.concat([m1,m2,m3], axis=1))
       B      C      F
0  False   True   True
1   True   True   True
2  False   True   True
3   True  False  False
4   True  False  False
5  False  False  False

load['flag']=np.where(m1, 'holiday',
             np.where(m2, 'weekday',
             np.where(m3, 'sate', 'no match')))

print (load)
   A  B  C  D  E  F      flag
0  a  4  7  1  5  a   weekday
1  b  5  8  3  3  a   holiday
2  c  4  9  5  6  a   weekday
3  d  5  4  7  9  b   holiday
4  e  5  2  1  2  b   holiday
5  f  4  3  0  4  b  no match

如果假日也是工作日,则应以假日为准。我想知道你的代码是否可以做到这一点?没有数据是很难测试的,但我认为可以有优先权
True
s在
m1
中使用
True
s在
m2
中,…我添加了示例数据,效果非常好-它替换为优先级。很高兴能提供帮助!如果我的答案有用,别忘了-点击复选标记(
),将其从灰显切换为填充。谢谢。事实上我是新来的。我现在就这么做了。再一次非常感谢
load = pd.DataFrame({'A':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'F':list('aaabbb')})

print (load)
m1 = load['B'] == 5
m2 = load['C'] >5
m3 = load['F'] == 'a'

print (pd.concat([m1,m2,m3], axis=1))
       B      C      F
0  False   True   True
1   True   True   True
2  False   True   True
3   True  False  False
4   True  False  False
5  False  False  False

load['flag']=np.where(m1, 'holiday',
             np.where(m2, 'weekday',
             np.where(m3, 'sate', 'no match')))

print (load)
   A  B  C  D  E  F      flag
0  a  4  7  1  5  a   weekday
1  b  5  8  3  3  a   holiday
2  c  4  9  5  6  a   weekday
3  d  5  4  7  9  b   holiday
4  e  5  2  1  2  b   holiday
5  f  4  3  0  4  b  no match