Pandas 基于某一列不同值获取行数据
在数据分析中,我们通常需要从数据集中筛选出符合某个条件的行数据。Pandas提供了丰富的方法来实现这一目标,其中一种常见的情况是基于一个列的不同值获取行数据。
阅读更多:Pandas 教程
方法一:利用groupby和apply实现
首先,我们可以使用Pandas中的groupby方法根据特定列分组,然后应用apply方法,利用df.loc获取对应的行。例如,假设我们有一个包含下列数据的DataFrame:
| Name | Age | Gender |
|---|---|---|
| Tom | 18 | M |
| Jerry | 21 | M |
| Alice | 18 | F |
| Bob | 25 | M |
要求基于Gender列的不同值(M和F)获取对应的行数据,可以采用以下代码:
>>> import pandas as pd
>>> data = pd.DataFrame({'Name': ['Tom', 'Jerry', 'Alice', 'Bob'],
... 'Age': [18, 21, 18, 25],
... 'Gender': ['M', 'M', 'F', 'M']})
>>> grouped = data.groupby('Gender')
>>> result = grouped.apply(lambda x: x.loc[x.index[0]])
>>> result
Name Age Gender
Gender
F Alice 18 F
M Tom 18 M
结果表明,我们根据Gender列的不同值(F和M),分别获取了对应的行数据。但是需要注意,由于groupby方法返回的是一个分组对象,apply处理后数据仍然是groupby的形式,在结果中Gender列被提升为索引。
方法二:使用drop_duplicates方法
除了上述方法,还可以使用Pandas中的drop_duplicates方法。该方法可以强制DataFrame只保留指定列中的唯一值,并返回一个新的DataFrame。例如:
>>> result = data.drop_duplicates(subset=['Gender'], keep='first')
>>> result
Name Age Gender
0 Tom 18 M
2 Alice 18 F
上述代码中,我们指定了Gender列作为去重列,利用keep参数控制去重行后保留哪一个,’first’表示保留第一个出现的行数据。
总结
本文介绍了两种基于某一列不同值获取行数据的方法,即groupby + apply和drop_duplicates。这两种方法各有优劣,需要根据实际情况选择。此外,Pandas还支持类似于SQL语句中的SELECT DISTINCT等方法,具体可参考官方文档。
极客教程