相关疑难解决方法(0)

将Pandas GroupBy对象转换为DataFrame

我从这样的输入数据开始

df1 = pandas.DataFrame( { 
    "Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] , 
    "City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } )
Run Code Online (Sandbox Code Playgroud)

打印时显示如下:

   City     Name
0   Seattle    Alice
1   Seattle      Bob
2  Portland  Mallory
3   Seattle  Mallory
4   Seattle      Bob
5  Portland  Mallory
Run Code Online (Sandbox Code Playgroud)

分组很简单:

g1 = df1.groupby( [ "Name", "City"] ).count()
Run Code Online (Sandbox Code Playgroud)

和打印产生一个GroupBy对象:

                  City  Name
Name    City
Alice   Seattle      1     1
Bob     Seattle      2     2
Mallory Portland     2     2
        Seattle      1     1
Run Code Online (Sandbox Code Playgroud)

但我最终想要的是另一个包含GroupBy对象中所有行的DataFrame对象.换句话说,我希望得到以下结果:

                  City  Name
Name …
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe pandas pandas-groupby

433
推荐指数
9
解决办法
55万
查看次数

如何在Pandas中组合数据框并保留列

给定一个数据框,记录一些书的使用情况,如下所示:

Name   Type   ID
Book1  ebook  1
Book2  paper  2
Book3  paper  3
Book1  ebook  1
Book2  paper  2
Run Code Online (Sandbox Code Playgroud)

我需要得到所有书籍的数量,保留其他列并得到这个:

Name   Type   ID    Count
Book1  ebook  1     2
Book2  paper  2     2
Book3  paper  3     1
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

谢谢!

python pandas

48
推荐指数
3
解决办法
6万
查看次数

熊猫:有什么相当于SQL组?

使用groupby和并行的最有效方法是在pandas中应用过滤器?

基本上我要求SQL中的等价物

select *
...
group by col_name
having condition
Run Code Online (Sandbox Code Playgroud)

我认为有很多用例,包括条件均值,总和,条件概率等,这些都会使这样的命令非常强大.

我需要一个非常好的性能,所以理想情况下这样的命令不会是在python中完成的几个分层操作的结果.

python pandas pandas-groupby

36
推荐指数
1
解决办法
2万
查看次数

pandas:groupby和aggregate,不会丢失已分组的列

我有一个pandas数据帧如下.对于每个Id,我可以有多个Name和Sub-id.

Id      NAME   SUB_ID
276956  A      5933
276956  B      5934
276956  C      5935
287266  D      1589
Run Code Online (Sandbox Code Playgroud)

我想压缩数据框,使每个id只有一行,每个id下的所有名称和sub_id在该行上显示为单数集

Id      NAME           SUB_ID
276956  set(A,B,C)     set(5933,5934,5935)
287266  set(D)         set(1589) 
Run Code Online (Sandbox Code Playgroud)

我尝试将id分组,然后聚合所有其他列

df.groupby('Id').agg(lambda x: set(x))
Run Code Online (Sandbox Code Playgroud)

但是在这样做时,结果数据帧没有Id列.当你执行groupby时,id将作为元组的第一个值返回,但我想当你聚合时会丢失.有没有办法获得我正在寻找的数据帧.这是groupby和aggregate而不会丢失已分组的列.

python group-by dataframe pandas

15
推荐指数
2
解决办法
1万
查看次数

Pandas Filter函数返回了一个Series,但是期望一个标量bool

我试图在pandas数据帧上使用过滤器来过滤掉与重复值匹配的所有行(当存在重复时需要删除所有行,而不仅仅是第一个或最后一个).

这就是我在编辑器中的作用:

df = df.groupby("student_id").filter(lambda x: x.count() == 1)
Run Code Online (Sandbox Code Playgroud)

但是,当我使用此代码运行我的脚本时,我收到错误:

TypeError:filter函数返回一个Series,但是期望一个标量bool

我在尝试应用过滤器之前,通过连接另外两个帧来创建数据帧.

python filter series pandas

7
推荐指数
1
解决办法
5175
查看次数

在 groupby 之后获得最低值 - Pandas

我有一个具有以下格式的表格:

data = {'City' : ['London', 'Paris', 'Paris','NY' 'London'], 'Distance' : [5, 1, 7, 2, 6]}
df = pd.DataFrame(data)
df

    City    Distance
0   London  5
1   Paris   1
2   Paris   7
3   NY      2
4   London  6
Run Code Online (Sandbox Code Playgroud)

我想创建一个所有行都具有唯一“城市”的表,并且每当有 2 行或更多行具有相同的“城市”值时,我希望它返回具有最低“距离”的行。所以在这种情况下,我想要一个这样的表:

City    Distance
London  5
Paris   1
NY      2
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用:

df.groupby('City')
Run Code Online (Sandbox Code Playgroud)

但我不知道要添加什么才能返回最小的“距离”。

最好的,罗莎

python pandas

3
推荐指数
2
解决办法
3533
查看次数

当与groupby一起使用sum()时,Python保留其他列

我在下面有一个熊猫数据框:

    df

    name    value1    value2  otherstuff1 otherstuff2 
0   Jack       1         1       1.19        2.39     
1   Jack       1         2       1.19        2.39
2   Luke       0         1       1.08        1.08  
3   Mark       0         1       3.45        3.45
4   Luke       1         0       1.08        1.08
Run Code Online (Sandbox Code Playgroud)

相同的“名称”将对otherstuff1和otherstuff2具有相同的值。

我正在尝试按“名称”列进行分组,并将“值1”列与“值2”列相加(不是将“值1”与“值2”相加!!但要在每列中分别对其求和)

期望得到以下结果:

    newdf

    name    value1    value2  otherstuff1 otherstuff2 
0   Jack       2         3       1.19        2.39     
1   Luke       1         1       1.08        1.08  
2   Mark       0         1       3.45        3.45
Run Code Online (Sandbox Code Playgroud)

我试过了

newdf = df.groupby(['name'], as_index = False).sum()
Run Code Online (Sandbox Code Playgroud)

它按名称分组并正确汇总了value1和value2列,但最终删除了列otherstuff1和otherstuff2。

请帮忙。非常感谢你们!

python pandas

3
推荐指数
2
解决办法
7405
查看次数

在 Pandas 数据框中按组过滤具有最小值的行

我刚刚过滤了一些数据,现在我有一个 .csv 文件,但我注意到我只需要选择具有最低价格的行:

例子:

ORIGIN   | DESTINA. | PRICE
____________________________
BOG      | MAD      |  1500
BOG      | MAD      |  750
BOG      | MAD      |  1250
BOG      | MAD      |  1350
BOG      | MIA      |   450
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我想得到的只是第三行和第六行:

ORIGIN   | DESTINA. | PRICE
____________________________
BOG      | MAD      | 750
BOG      | MIA      | 450
Run Code Online (Sandbox Code Playgroud)

使用 python,我怎样才能得到这个决赛桌?

python group-by aggregate pandas pandas-groupby

2
推荐指数
1
解决办法
3108
查看次数