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是的,很好。我已经更新了我的答案以概括。