作业有助于对以相同的三个字母开头且在各列中具有相同值的列名称行进行分类?

时间:2019-02-05 03:30:42

标签: pandas dataframe

编码的新手,需要解决以下家庭作业问题: 考虑所有名称以“ 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)  

1 个答案:

答案 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} } ....换句话说,该行的所有列都包含相同的值。使用熊猫切片,仅返回TrueTrue,这就是问题-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