编码的新手,需要解决以下家庭作业问题: 考虑所有名称以“ Cl”开头的列(分类,聚类,并假设可能还有许多其他列)。在所有“ Cl”列中检索具有相同值的那些人的行。例如,您应该返回在所有Cl列中具有4.0的人员,或者在所有Cl列中具有3.0的人员。但您不应该返回所有Cl列中4.0的人,只有一个列中有3.0的人。提示:首先为每个学生计算“ Cl”列中的最大值和最小值。
我不确定从哪里开始这个问题?不能完全理解所要询问的内容吗?
样本数据集的图片:[1]:https://i.stack.imgur.com/xglFm.png
给定数据框的代码:
import pandas as pd
df = pd.read_csv("cleaned_survey.csv", index_col=0)
df.drop(['ProgSkills','Languages','Expert'],axis=1,inplace=True)
答案 0 :(得分:1)
根据OP要求生成一些虚拟数据
import pandas as pd
a = [['Classification','Clustering','Top'],
[8,7,5],
[8,1333,3],
[50,50,1],
[50,3363,2],
[50,50,3],
[83,50,4],
[83,83,5]]
df = pd.DataFrame(a[1:], columns=a[0])
print(df)
Classification Clustering Top
0 8 7 5
1 8 1333 3
2 50 50 1
3 50 3363 2
4 50 50 3
5 83 50 4
6 83 83 5
通过部分列名选择列(返回2列)(link used)
df = df[df.columns[df.columns.str.startswith('Cl')]]
print(df)
Classification Clustering
0 8 7
1 8 1333
2 50 50
3 50 3363
4 50 50
5 83 50
6 83 83
最后,使用pandas .nunique(axis=1)
method逐列返回不同的观察数(在虚拟数据中,如果两列都包含相同的值,则返回1)。然后将其与整数1进行比较。如果这2个值相等(对于特定行),则您知道该行的唯一条目数为1,并且...eq(..)
的布尔掩码返回{{1} } ....换句话说,该行的所有列都包含相同的值。使用熊猫切片,仅返回True
行True
,这就是问题-link used的问题。
df = df[...]
要使用print(df[df.nunique(axis=1).eq(1)])
Classification Clustering
2 50 50
4 50 50
6 83 83
和min
,请参见this link-如果所有列的每一行的最小值和最大值相等,则元素在行方向相同,例如必填(useful post on using apply
column-wise)
max