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
Python 2.7 如何使用dict中定义的条件在dataframe中创建列_Python 2.7_Pandas_Numpy - Fatal编程技术网

Python 2.7 如何使用dict中定义的条件在dataframe中创建列

Python 2.7 如何使用dict中定义的条件在dataframe中创建列,python-2.7,pandas,numpy,Python 2.7,Pandas,Numpy,这是我的密码: import pandas as pd import numpy as np input = {'name': ['Andy', 'Alex', 'Amy', "Olivia" ], 'rating': ['A', 'A', 'B', "B" ], 'score': [100, 60, 70, 95]} df = pd.DataFrame(input) df['valid1']=np.where((df['score']==100) & (

这是我的密码:

import pandas as pd
import numpy as np
input = {'name': ['Andy', 'Alex', 'Amy', "Olivia" ],
        'rating': ['A', 'A', 'B', "B" ],
        'score': [100, 60, 70, 95]}
df = pd.DataFrame(input)
df['valid1']=np.where((df['score']==100) & (df['rating']=='A'),'true','false')
上面的代码可以很好地将新列“valid1”数据设置为“true”,分数为100,“评级”为a

如果条件来自dict变量as

c = {'score':'100', 'rating':'A'}
如何使用c中定义的条件获得相同的结果“valid”列值?我尝试了以下代码

for key,value in c.iteritems():
    df['valid2']=np.where((df[key]==value),'true','false')
出现错误:

TypeError: Invalid type comparison

我将
c
定义为
pd.Series
,这样当您将其与数据帧进行比较时,它会自动重新比较每一行,同时将列与序列索引进行匹配。请注意,我确保
100
是一个整数而不是字符串

c = pd.Series({'score':100, 'rating':'A'})
i = df.columns.intersection(c.index)
df.assign(valid1=df[i].eq(c).all(1))

     name rating  score  valid1
0    Andy      A    100    True
1    Alex      A     60   False
2     Amy      B     70   False
3  Olivia      B     95   False
您可以使用相同的
系列
,但仍然可以使用
numpy
来加快速度

c = pd.Series({'score':100, 'rating':'A'})
i = df.columns.intersection(c.index)
v = np.column_stack(df[c].values for c in i)
df.assign(valid1=(v == c.loc[i].values).all(1))

     name rating  score  valid1
0    Andy      A    100    True
1    Alex      A     60   False
2     Amy      B     70   False
3  Olivia      B     95   False

谢谢你,皮尔斯。我的真实数据帧有许多列,我有许多从不同列名定义的条件。行df.assign(valid1=df[['score','rating']].eq(c).all(1))具有硬编码的'score','rating'。如何使用条件C中定义的键值作为变量,而不是硬编码代码中的“分数”和“评级”?@mnnmountain是的,很好。我已经更新了我的答案以概括。