Pandas:“按资产分组”的简单公式


您可以使用以下基本语法来执行与 pandas 中的“GROUP BY HAVING”SQL 语句等效的操作:

 df. groupby (' some_column '). filter ( lambda x: some condition)

以下示例展示了如何在实践中通过以下 pandas DataFrame 使用此语法:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
                   ' position ': ['G', 'F', 'F', 'G', 'F', 'F', 'G', 'G'],
                   ' points ': [30, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print (df)

  team position points
0 AG 30
1 AF 22
2 FY 19
3 BG 14
4 BF 14
5 BF 11
6 GC 20
7 GC 28

示例 1:一群熊猫有 Count

以下代码显示如何根据“团队”列中的值对行进行分组,然后仅筛选计数大于 2 的团队:

 #group by team and filter for teams with count > 2
df. groupby (' team '). filter ( lambda x: len (x) > 2 )


        team position points
0 A G 30
1 A F 22
2 A F 19
3 B G 14
4 B F 14
5 B F 11

请注意,仅返回团队值为“A”或“B”的行,因为这两个团队的人数均大于 2。

示例 2:大熊猫群的平均值

以下代码显示如何根据“团队”列中的值对行进行分组,然后仅筛选平均分值大于 20 的团队:

 #group by team and filter for teams with mean points > 20
df. groupby (' team '). filter ( lambda x: x[' points ']. mean () > 20 )

        team position points
0 A G 30
1 A F 22
2 A F 19
6 C G 20
7 C G 28

请注意,仅返回球队值为“A”或“C”的行,因为这是平均分值大于 20 的两支球队。

示例 3:一群熊猫有 sum

以下代码显示了如何按团队列中的值对行进行分组,然后仅筛选得分总和恰好为 48 的团队:

 #group by team and filter for teams with sum of points equal to 48
df. groupby (' team '). filter ( lambda x: x[' points ']. sum () == 48 )

        team position points
6 C G 20
7 C G 28

请注意,仅返回球队值为“C”的行,因为这是唯一一支积分总和等于 48 的球队。

其他资源

以下教程解释了如何在 pandas 中执行其他常见操作:

Pandas:获取列与值匹配的行的索引
Pandas:如何选择包含特定字符串的列
Pandas:如何检查列是否包含字符串

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注