为了账号安全,请及时绑定邮箱和手机立即绑定

Groupby 并将函数应用于 Python 中的子数据框

Groupby 并将函数应用于 Python 中的子数据框

千万里不及你 2023-02-22 17:20:42
如何分组item,date然后对于每个子数据帧,获取“数据”值是子数据帧中实际中间值的实际行?有时会有多行data等于中间值,在这种情况下我们只保留第一行。df:    item   date        data0   22     2012-03-10  101   22     2012-03-10  202   22     2012-03-10  403   24     2012-03-11  404   24     2012-03-11  505   24     2012-03-11  50预期输出:1   22     2012-03-10  204   24     2012-03-11  50
查看完整描述

4 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以使用groupby().transform()然后使用布尔索引:


medians = df.groupby(['item','date'])['data'].transform('median')


# drop duplicates in the case 

# there are multiple rows equal to median

df[df['data']==medians].drop_duplicates(['item','date','data'])

输出:


   item        date  data

1    22  2012-03-10    20

4    24  2012-03-11    50


查看完整回答
反对 回复 2023-02-22
?
智慧大石

TA贡献1946条经验 获得超3个赞

您可以使用以下示例使用 pandas df['date'] = pd.to_datetime(df['date']).dt.date

df1 = df.groupby(['data','date'])['date','data'].median()

df1


查看完整回答
反对 回复 2023-02-22
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

尝试这个:


df.groupby(['item', 'date'], as_index=False).median()

输出:


   item        date  data

0    22  2012-03-10    20

1    24  2012-03-11    50


查看完整回答
反对 回复 2023-02-22
?
慕森卡

TA贡献1806条经验 获得超8个赞

请.groupby(),。agg(median)


 df[['item', 'date', 'data']].groupby(['date', 'item',]).agg('median').reset_index()


        date  item  data

0  2012-03-10    22    20

1  2012-03-11    24    50


查看完整回答
反对 回复 2023-02-22
  • 4 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信