【问题标题】:How to get all last rows at second level in MultiIndex DataFrame whose second level has variable length如何在第二级具有可变长度的MultiIndex DataFrame中获取第二级的所有最后一行
【发布时间】:2021-10-20 02:32:43
【问题描述】:

我有这个数据框:

df = pd.DataFrame({
    'thread_id': [0,0,1,1,1,2,2],
    'message_id_in_thread': [0,1,0,1,2,0,1],
    'text': ['txt0', 'txt1', 'txt2', 'txt3', 'txt4', 'txt5', 'txt6']
}).set_index(['thread_id', 'message_id_in_thread'])

我想保留所有最后的第二级行,这意味着:

  • 对于thread_id==0,我想保留行message_id_in_thread==1
  • 对于thread_id==1,我想保留行message_id_in_thread==2
  • 对于thread_id==2,我想保留行message_id_in_thread==1

这可以通过df.iterrows()轻松实现,但我想知道是否有任何直接索引方法。

我寻找类似df.loc[(:, -1)] 的东西,它从所有 (:) 级别 1 组中选择该块/组的最后 (-1) 行,但显然这不起作用。

【问题讨论】:

  • 嗯。看起来你可以在 thread_id 上分组并选择最后一行 .last

标签: python pandas dataframe indexing pandas-groupby


【解决方案1】:

如果需要两个级别都使用GroupBy.tail:

df = df.groupby(level=0).tail(1)
print (df)
                                text
thread_id message_id_in_thread      
0         1                     txt1
1         2                     txt4
2         1                     txt6

如果只需要第一级,请使用GroupBy.lastGroupBy.nth

df = df.groupby(level=0).last()
#df = df.groupby(level=0).nth(-1)
print (df)
           text
thread_id      
0          txt1
1          txt4
2          txt6

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 2021-06-18
    • 1970-01-01
    • 2018-07-23
    • 2017-06-13
    • 2022-11-29
    • 2021-09-29
    • 2015-04-11
    • 2020-06-05
    相关资源
    最近更新 更多