【问题标题】:Python Pandas Dataframe get count of rows after filtering using values from multiple columnsPython Pandas Dataframe 在使用多列中的值进行过滤后获取行数
【发布时间】:2017-09-16 15:12:11
【问题描述】:

我有一个如下所示的数据框。 我想通过获取以下计数来构建数据配置文件。

1) 唯一学生 ID 的计数(学生人数) 我的答案有效:

print(len(df['Student ID'].unique()))

2) 唯一学生 ID 的计数其中 International=N(非国际学生人数)

我的回答无效:print(len(df1.loc[(df1['Student ID'].unique())['International Student'] == N]))

3) International=N & ATAR 不为空的唯一学生 ID 计数(拥有 ATAR 的非国际学生人数)

4) ATAR 0-50

之间的唯一学生 ID 的计数

其他一些问题:

5) 我如何创建一个新的数据框,只有唯一的学生 ID 和所有其他列,在第一个之后删除每个学生 ID 的所有行

非常感谢您回答问题 2-5。

Student_ID            International       marks      ATAR

119                   N                    60         80
119                   N                    70         80
119                   N                    75         80
129                   Y                    78         75
129                   Y                    60         75 
155                   Y                    85         
155                   Y                    80          

【问题讨论】:

    标签: python pandas dataframe count rows


    【解决方案1】:
    df = pd.DataFrame({
    'International': ['N', 'N', 'N', 'Y', 'Y', 'Y', 'Y'], 
    'marks': [60, 70, 75, 78, 60, 85, 80], 
    'Student_ID': [119, 119, 130, 140, 155, 155, 155], 
    'ATAR': [80.0, 20.0, np.nan, 50.0, 15.0, np.nan, np.nan]
    }).reindex_axis(['Student_ID','International','marks','ATAR'], axis=1)
    
    print (df)
       Student_ID International  marks  ATAR
    0         119             N     60  80.0
    1         119             N     70  20.0
    2         130             N     75   NaN
    3         140             Y     78  50.0
    4         155             Y     60  15.0
    5         155             Y     85   NaN
    6         155             Y     80   NaN
    

    需要Series.nunique,主要是boolean indexingloc用于返回一列(Series),最后drop_duplicates用于新的df1

    print(df['Student_ID'].nunique())
    4
    print(df.loc[df['International'] == 'N', 'Student_ID'].nunique())
    2
    print(df.loc[(df['International'] == 'N') & (df['ATAR'].notnull()), 'Student_ID'].nunique())
    1
    print(df.loc[df['ATAR'].between(0,50), 'Student_ID'].nunique())
    3
    
    df1 = df.drop_duplicates('Student_ID')
    print (df1)
       Student_ID International  marks  ATAR
    0         119             N     60  80.0
    2         130             N     75   NaN
    3         140             Y     78  50.0
    4         155             Y     60  15.0
    

    【讨论】:

    • 没问题,这是我的大学,快捷方式是 BA STU ;)
    • :D 对我来说意味着 BA(商业分析)学生。感谢你。你也是
    • :D :D 是的,很好:)
    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    相关资源
    最近更新 更多