微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在应用某些功能的同时以成对的方式组合数据框中的行

如何解决如何在应用某些功能的同时以成对的方式组合数据框中的行

我有一个将键存储为 ID 的数据框,以及 Val1/Val2 中的一些数值:

ID    Val1    Val2
id0     10      20
id0     11      19
id1      5       5
id1      1       1
id1      2       4

我想查看此数据框并成对组合行,同时获取具有相同 ID 的行的 Val1/Val2 的平均值。应根据新行的编号对添加后缀。

这是结果数据框:

ID      Val1    Val2
id0_1   10.5    19.5
id1_1   3       3
id1_2   1.5     2.5

在这个例子中,只剩下 3 行了。 (id0,10,20) 与 (id0,11,19) 取平均值并合并为一行。

(id1,5,5) 与 (id1,1,) 和 (id1,1) 与 (id1,2,4) 进行平均以形成剩余的 2 行。

我可以想到一种迭代方法,但这会非常慢。我怎么能以适当的 pythonic/pandas 方式做到这一点?

代码

df = pd.DataFrame(columns=['ID','Val1','Val2'],data=[['id0',20],['id0',19],['id1',5],1],4]])

解决方法

您可以在按 df.rolling 分组后使用 ID

out = df.groupby('ID').rolling(2).mean() \
        .dropna(how='all').reset_index(level=1,drop=True)

out.index += '_' + out.groupby(level=0).cumcount().add(1).astype(str)
>>> out
       Val1  Val2
id0_1  10.5  19.5
id1_1   3.0   3.0
id1_2   1.5   2.5

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。