最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pandas groupby分組對象的組內(nèi)排序解決方案

 更新時間:2021年03月26日 09:14:05   作者:guofei_fly  
這篇文章主要介紹了pandas groupby分組對象的組內(nèi)排序解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

問題:

根據(jù)數(shù)據(jù)某列進行分組,選擇其中另一列大小top-K的的所在行數(shù)據(jù)

解析:

求解思路很清晰,即先用groupby對數(shù)據(jù)進行分組,然后再根據(jù)分組后的某一列進行排序,選擇排序結(jié)果后的top-K結(jié)果

案例:

取一下dataframe中B列各對象中C值最高所在的行

df = pd.DataFrame({"A": [2, 3, 5, 4], "B": ['a', 'b', 'b', 'a'], "C": [200801, 200902, 200704, 201003]})

Groupby的基本功能介紹

groupby以后返回DataFrameGroupBy對象,實際上還沒有進行任何計算,只是一個暫時存儲的容器,

[In]df.groupby('B')
[Out]<pandas.core.groupby.DataFrameGroupBy object at 0x11800f588>

對groupby結(jié)果進行簡單的列選取返回的也是DataFrameGroupBy/SeriesGroupBy對象,無法可視化

[In]df.groupby('B')['A']   # 返回SeriesGroupBy對象
[Out]<pandas.core.groupby.SeriesGroupBy object at 0x117f6b630>

[In]df.groupby('B')['A','C']   # 返回DataFrameGroupBy對象
[Out]<pandas.core.groupby.DataFrameGroupBy object at 0x117fb84e0>

需要對DataFrameGroupBy進行計數(shù)、統(tǒng)計、agg聚合計算、apply映射計算和transform等操作,才能生成可視化的數(shù)據(jù)(下文僅以count和size函數(shù)為例展示,不涉及其它的操作)

[In] df.groupby('B', as_index=False)['A'].count()  # 組內(nèi)數(shù)據(jù)統(tǒng)計
[Out] B A
 0 a 2
 1 b 2

[In] df.groupby('B')['A'].size().reset_index(name='Size') # 組內(nèi)數(shù)據(jù)統(tǒng)計,size和count的一個顯著區(qū)別在于count不考慮Nan,size考慮Nan
[Out] B Size
 0  a 2
 1  b 2

解決方案一:

對DataFrameGroupBy對象,用apply函數(shù)進行某列的sort_values排序,再選出其中的最大值所在行

# 返回值是一個帶有multiindex的dataframe數(shù)據(jù),其中l(wèi)evel=0為groupby的by列,而level=1為原index
[In] df.groupby('B').apply(lambda x: x.sort_values('C', ascending=False))
[Out] A B C
B  
a 3 4 a 201003
 0 2 a 200801
b 1 3 b 200902
 2 5 b 200704

# 通過設(shè)置group_keys參數(shù)對multiindex進行優(yōu)化
[In] df.groupby('B', group_keys=False).apply(lambda x: x.sort_values('C', ascending=False))
[Out] A B  C
 3 4 a 201003
 0 2 a 200801
 1 3 b 200902
 2 5 b 200704

# 再次groupby,并調(diào)用內(nèi)置的first()方法,取最大值
[In] df.groupby('B', group_keys=False).apply(lambda x: x.sort_values('C', ascending=False)).groupby('B').first().reset_index()
[Out]  B A  C
 0 a 4 201003
 1 b 3 200902

解決方案二:

先對B進行整體的sort_values,在groupy取值

[In] df.sort_values('C', ascending=False).groupby('B').first().reset_index()
[Out]  B A  C
 0 a 4 201003
 1 b 3 200902

問題拓展:

以上僅解決了Top-1的問題,如果是Top-k呢?

答案:將first()函數(shù)變?yōu)閔ead()函數(shù)

[In] df.sort_values('C', ascending=False).groupby('B').head(2)
[Out] A B C
 3 4 a 201003
 1 3 b 200902
 0 2 a 200801
 2 5 b 200704

總結(jié):

1、方案二,即先排序再groupby取值更方便

2、pandas中API眾多,在實際使用時要捋清各步驟返回值的類型以方便記憶和聯(lián)想

補充:pandas分組groupby、agg,排序sort,連接concat、join

連接concat和join

橫向連接

pd.concat([df6,df7],axis=1)
df6.join(df7)

# df6的表格在前面,如需df7的表格在前需要交換位置

注意點:

1、concat這個方法,既可以實現(xiàn)橫向連接,也可以實現(xiàn)縱向連接,通過設(shè)置axis的值來控制,axis=1表示的是橫向連接,如果多個連接的對象,放在列表中

2、join也可以實現(xiàn)

縱向連接

pd.concat([df8,df9],ignore_index=True)

注意點:

1、進行縱向合并的數(shù)據(jù),需要用[]集合起來

2、ignore_index忽略原有的行索引,重新排列

3、drop_duplicates()刪除重復(fù)數(shù)據(jù)

排序

#按照成績排序
df10.sort_values('score')
#默認升序,從小到大

df10.sort_values(['score','group'],ascending=False,na_position='first')
#sort各個屬性
參數(shù) 描述
by 字符串或者列表,如果是單個排序字段,使用的是字符串,如果指定多個,需要使用列表
ascending True的時候,是按照升序,默認是升序
na_position 表示的是空值的位置,'last'是默認的,'first'開始位置

分組

### groupby
df11.groupby('class')
df11.groupby(['class','grade'])

for cls,data in df11.groupby(['class','grade']):
print(cls)
print(data)

注意點:

1、groupby 如果指定的是一個列,如果是多個列[]

2、groupby返回的是一個對象,所以不能直接訪問,可以使用for

篩選出分組之后的列

如果篩選出一列數(shù)據(jù)[[列名]],返回的是dataframe對象

如果篩選出多個列數(shù)據(jù),直接使用[]和[[]]均可

總結(jié)[[列1,列2,。。。。]]

聚合函數(shù) agg配合使用

dff.groupby('class')[['math']].agg(['mean','max','min','median','std'])
函數(shù) 描述
mean 均值
max 最大值
min 最小值
median 中位數(shù)
std 標(biāo)準(zhǔn)差
count 計數(shù)
skew 偏度
quantile 指定分位數(shù)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 關(guān)于Python 內(nèi)置庫 itertools

    關(guān)于Python 內(nèi)置庫 itertools

    今天得這篇文章就來給大家介紹一下Python的系統(tǒng)庫itertools的 相關(guān)資料,需要的小伙伴可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Python生成隨機數(shù)的方法

    Python生成隨機數(shù)的方法

    這篇文章主要介紹了Python生成隨機數(shù)的方法,有需要的朋友可以參考一下
    2014-01-01
  • Python通用唯一標(biāo)識符uuid模塊使用案例

    Python通用唯一標(biāo)識符uuid模塊使用案例

    這篇文章主要介紹了Python通用唯一標(biāo)識符uuid模塊使用案例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python中關(guān)于Sequence切片的下標(biāo)問題詳解

    Python中關(guān)于Sequence切片的下標(biāo)問題詳解

    這篇文章主要給大家介紹了Python中關(guān)于Sequence切片下標(biāo)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Python實現(xiàn)甘特圖繪制的示例詳解

    Python實現(xiàn)甘特圖繪制的示例詳解

    相信在平常實際工作當(dāng)中,需要對整體的項目做一個梳理,這時如果有一個網(wǎng)頁應(yīng)用能夠?qū)φw項目有一個可視化頁面的展示,是不是會對你的實際工作有所幫助呢?今天小編就通過Python+Streamlit框架來繪制甘特圖并制作可視化大屏,需要的可以參考一下
    2023-04-04
  • Python讀取excel文件中帶公式的值的實現(xiàn)

    Python讀取excel文件中帶公式的值的實現(xiàn)

    這篇文章主要介紹了Python讀取excel文件中帶公式的值的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 利用python繪制蜂群圖的示例代碼

    利用python繪制蜂群圖的示例代碼

    蜂群圖可以不重疊的顯示各數(shù)據(jù)點的分布,相對于散點圖,所繪制的點彼此靠近且不會重疊,能有效呈現(xiàn)出點分布的局部密度信息,本文給大家介紹了如何利用python繪制蜂群圖,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Python代碼實現(xiàn)列表分組計數(shù)

    Python代碼實現(xiàn)列表分組計數(shù)

    這篇文章主要介紹了Python代碼實現(xiàn)列表分組計數(shù),利用Python代碼實現(xiàn)了使用分組函數(shù)對列表進行分組,并計算每組的元素個數(shù)的功能,需要的朋友可以參考一下
    2021-11-11
  • 解決tensorflow讀取本地MNITS_data失敗的原因

    解決tensorflow讀取本地MNITS_data失敗的原因

    這篇文章主要介紹了解決tensorflow讀取本地MNITS_data失敗的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python與matlab一些常用函數(shù)互轉(zhuǎn)問題

    python與matlab一些常用函數(shù)互轉(zhuǎn)問題

    這篇文章主要介紹了python與matlab一些常用函數(shù)互轉(zhuǎn),包括十六進制字節(jié)流數(shù)據(jù)的相關(guān)知識,本文通過示例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2022-12-12

最新評論

卢龙县| 呼和浩特市| 伊宁市| 观塘区| 嘉峪关市| 乌拉特后旗| 巢湖市| 南郑县| 江达县| 黄大仙区| 朝阳区| 琼海市| 华蓥市| 麦盖提县| 正阳县| 黔东| 南郑县| 黔东| 崇义县| 衢州市| 金平| 将乐县| 尼玛县| 安阳市| 佛山市| 枣强县| 屏山县| 永平县| 林口县| 阜南县| 乡城县| 宾阳县| 云龙县| 南澳县| 静宁县| 呼和浩特市| 军事| 青冈县| 巴彦淖尔市| 苍南县| 三门县|