python - Pandas:根据条件获取多列

标签 python python-3.x pandas dataframe

我有一个像这样的数据框df:

Date           Student_id    Subject     Subject_Scores
11/30/2020     1000101       Math           70
11/25/2020     1000101       Physics        75
12/02/2020     1000101       Biology        60
11/25/2020     1000101       Chemistry      49
11/25/2020     1000101       English        80
12/02/2020     1000101       Biology        60
11/25/2020     1000101       Chemistry      49
11/25/2020     1000101       English        80
12/02/2020     1000101       Sociology      50
11/25/2020     1000102       Physics        80
11/25/2020     1000102       Math           90
12/15/2020     1000102       Chemistry      63
12/15/2020     1000103       English        71

案例:1

如果我使用df[df['Student_id]=='1000102']['Date'],则会给出该特定Student_id的唯一日期。 如何在单一条件下获得相同的多列结果。

我想根据条件获取多列,如何为 Student_id = 1000102 获取类似这样的输出 df:

Date            Subject     
11/25/2020      Physics        
11/25/2020      Math           
12/15/2020      Chemistry      

我已经尝试过这个,但出现错误:

df[df['Student_id']=='1000102']['日期', '主题'] 并且

df[df['Student_id']=='1000102']['日期']['主题']

案例:2

如何在上述场景中使用 df.unique()(对于多列)

df[df['Student_id']=='1000102']['Date', 'Subject'].unique() #this 给出错误

这怎么可能实现。

最佳答案

您可以将列表传递给DataFrame.loc :

df1 = df.loc[df['Student_id']=='1000102', ['Date', 'Subject']]
print (df1)
          Date    Subject
9   11/25/2020    Physics
10  11/25/2020       Math
11  12/15/2020  Chemistry

如果需要唯一值,请添加 DataFrame.drop_duplicates :

df2 = df.loc[df['Student_id']=='1000102', ['Date', 'Subject']].drop_duplicates()
print (df2)
          Date    Subject
9   11/25/2020    Physics
10  11/25/2020       Math
11  12/15/2020  Chemistry

如果需要Series.unique分别为每一列:

df3 = df.loc[df['Student_id']=='1000102', ['Date', 'Subject']].apply(lambda x: x.unique())
print (df3)
Date         [11/25/2020, 12/15/2020]
Subject    [Physics, Math, Chemistry]
dtype: object

关于python - Pandas:根据条件获取多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66346050/

相关文章:

python - Longdouble(1e3000) 变成 inf : What can I do?

python - pcap 纳秒 Python

python - 使用两个左下角和右上角检查两个矩形在python中是否重叠

python - 从 str 中提取字符并使用 Pandas 重新格式化数据帧

python - 使用 python pandas 从原始数据构建访问矩阵

python - 我可以使用交叉表来获取用于求和的数据透视表吗?

Python-%粘贴

python-3.x - 每个客户的连续行之间的半正矢距离

json - 在 FastAPI 应用程序中将 JSON 转换为 DataFrame

python - 尝试使用经度和纬度获取距离,但一直运行到错误 : 'Series' object has no attribute 'radians'