我从这样的输入数据开始
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) 我正在使用groupbypandas数据帧删除所有没有特定列的最小行.像这样的东西:
df1 = df.groupby("item", as_index=False)["diff"].min()
Run Code Online (Sandbox Code Playgroud)
但是,如果我有超过这两列,则其他列将被删除.我可以使用groupby保留这些列,还是我必须找到一种不同的方法来删除行?
我的数据如下:
item diff otherstuff
0 1 2 1
1 1 1 2
2 1 3 7
3 2 -1 0
4 2 1 3
5 2 4 9
6 2 -6 2
7 3 0 0
8 3 2 9
Run Code Online (Sandbox Code Playgroud)
并应该最终像:
item diff otherstuff
0 1 1 2
1 2 -6 2
2 3 0 0
Run Code Online (Sandbox Code Playgroud)
但我得到的是:
item diff
0 1 1
1 2 -6
2 3 0
Run Code Online (Sandbox Code Playgroud)
我一直在查看文档,找不到任何东西.我试过了:
df1 = df.groupby(["item", …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。
请帮忙。非常感谢你们!