Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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 基于现有数据帧的条件创建新数据帧_Python_Pandas_If Statement - Fatal编程技术网

Python 基于现有数据帧的条件创建新数据帧

Python 基于现有数据帧的条件创建新数据帧,python,pandas,if-statement,Python,Pandas,If Statement,我想创建一个新的dataframe,其中一列包含0或1,具体取决于现有dataframe的条件 在df(现有)数据帧中,我想检查a、b和c列中的值是否同时包含零。如果是这样,则创建一个新的dataframe,其中一列在满足条件时返回零。否则返回1 现有数据帧的示例: df = pd.DataFrame({"a":[0,1,0,0],"b":[0,None,0,None],"c":[0,8,0,10],"new_col":[5,5,5,5]}) mylist = ['a','b','c'] if

我想创建一个新的dataframe,其中一列包含0或1,具体取决于现有dataframe的条件

在df(现有)数据帧中,我想检查a、b和c列中的值是否同时包含零。如果是这样,则创建一个新的dataframe,其中一列在满足条件时返回零。否则返回1

现有数据帧的示例:

df = pd.DataFrame({"a":[0,1,0,0],"b":[0,None,0,None],"c":[0,8,0,10],"new_col":[5,5,5,5]})
mylist = ['a','b','c']

if any((df[mylist] == 0).all(1).values):
    print('all zeros')
else:
    print('contains nonzero')
df_new = pd.DataFrame({'col':[0,1,0,1]})
我不知道应该用什么来代替打印语句以获得所需的结果

所需数据帧:

df = pd.DataFrame({"a":[0,1,0,0],"b":[0,None,0,None],"c":[0,8,0,10],"new_col":[5,5,5,5]})
mylist = ['a','b','c']

if any((df[mylist] == 0).all(1).values):
    print('all zeros')
else:
    print('contains nonzero')
df_new = pd.DataFrame({'col':[0,1,0,1]})

提前谢谢

我相信您需要更改支票的条件,而不等于
任何

df['out'] = (df[mylist] != 0).any(1).astype(int)
print (df)
   a    b   c  new_col  out
0  0  0.0   0        5    0
1  1  NaN   8        5    1
2  0  0.0   0        5    0
3  0  NaN  10        5    1
如果需要新的数据帧:

df1 = (df[mylist] != 0).any(1).astype(int).to_frame('col')
print (df1)
   col
0    0
1    1
2    0
3    1
它必须使用“if”语句

在pandas中,使用
if-else
函数从
numpy
-:

也可以使用
if-else
解决方案,但不要使用,因为速度慢:

out = []

for x in (df[mylist] == 0).all(1).values:
    if np.any(x):
        out.append(0)
    else:
        out.append(1)

df['out'] = out
print (df)
   a    b   c  new_col  out
0  0  0.0   0        5    0
1  1  NaN   8        5    1
2  0  0.0   0        5    0
3  0  NaN  10        5    1