我从这样的输入数据开始
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) 给定一个数据框,记录一些书的使用情况,如下所示:
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)
如何才能做到这一点?
谢谢!
使用groupby和并行的最有效方法是在pandas中应用过滤器?
基本上我要求SQL中的等价物
select *
...
group by col_name
having condition
Run Code Online (Sandbox Code Playgroud)
我认为有很多用例,包括条件均值,总和,条件概率等,这些都会使这样的命令非常强大.
我需要一个非常好的性能,所以理想情况下这样的命令不会是在python中完成的几个分层操作的结果.
我有一个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而不会丢失已分组的列.
我试图在pandas数据帧上使用过滤器来过滤掉与重复值匹配的所有行(当存在重复时需要删除所有行,而不仅仅是第一个或最后一个).
这就是我在编辑器中的作用:
df = df.groupby("student_id").filter(lambda x: x.count() == 1)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用此代码运行我的脚本时,我收到错误:
TypeError:filter函数返回一个Series,但是期望一个标量bool
我在尝试应用过滤器之前,通过连接另外两个帧来创建数据帧.
我有一个具有以下格式的表格:
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)
但我不知道要添加什么才能返回最小的“距离”。
最好的,罗莎
我在下面有一个熊猫数据框:
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。
请帮忙。非常感谢你们!
我刚刚过滤了一些数据,现在我有一个 .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,我怎样才能得到这个决赛桌?