Python 检查列中所有值的几个条件
我刚刚开始使用python和pandas。我在google和stack overflow上搜索了我的问题的答案,但没有找到答案。 这就是我需要做的: 我有一个df,每个人有几个数据行(id)和一个名为response_go的变量,它可以编码为1或0(输入int64),比如这个(更大,每个人有480行…) 现在,我想检查每个ID/个人的响应中的条目是否都分别编码为0、1或两者都不编码(else条件)。到目前为止,我已经得出了以下结论:Python 检查列中所有值的几个条件,python,pandas,dataframe,Python,Pandas,Dataframe,我刚刚开始使用python和pandas。我在google和stack overflow上搜索了我的问题的答案,但没有找到答案。 这就是我需要做的: 我有一个df,每个人有几个数据行(id)和一个名为response_go的变量,它可以编码为1或0(输入int64),比如这个(更大,每个人有480行…) 现在,我想检查每个ID/个人的响应中的条目是否都分别编码为0、1或两者都不编码(else条件)。到目前为止,我已经得出了以下结论: ids = df['ID'].unique()
ids = df['ID'].unique()
for id in ids:
if (df.response_go.all() == 1):
print "ID:",id,": 100% Go"
elif (df.response_go.all() == 0):
print "ID:",id,": 100% NoGo"
else:
print "ID:",id,": Mixed Response Pattern"
但是,它给了我以下输出:
ID: 1 : 100% NoGo
ID: 2 : 100% NoGo
ID: 2 : Mixed Response Pattern
应该在什么时候(包括1和0)
如果以前有人问过这个问题,我真的很抱歉,但在寻找答案时,我真的没有找到解决这个问题的方法。如果以前有人回答过这个问题,请告诉我解决方案。谢谢大家!!!!真的很感激 样本(数据不同)——
使用groupby
+mean
-
v = df.groupby('ID').response_go.mean()
v
ID
1 0.000000
2 1.000000
3 0.333333
Name: response_go, dtype: float64
u = np.select([v == 1, v == 0, v < 1], ['100% Go', '100% NoGo', 'Mixed Response Pattern'])
使用np。选择根据响应的平均值计算您的状态
v = df.groupby('ID').response_go.mean()
v
ID
1 0.000000
2 1.000000
3 0.333333
Name: response_go, dtype: float64
u = np.select([v == 1, v == 0, v < 1], ['100% Go', '100% NoGo', 'Mixed Response Pattern'])
现在,返回结果-
v[:] = u
v
ID
1 100% NoGo
2 100% Go
3 Mixed Response Pattern
Name: response_go, dtype: object
@你认为呢?请随意写一个答案;)
u = np.where(v == 1, '100% Go', np.where(v == 0, '100% NoGo', 'Mixed Response Pattern'))
v[:] = u
v
ID
1 100% NoGo
2 100% Go
3 Mixed Response Pattern
Name: response_go, dtype: object