pandas groupby对象中n和n + 1行之间的平均值?
Posted
技术标签:
【中文标题】pandas groupby对象中n和n + 1行之间的平均值?【英文标题】:Mean between n and n+1 row in pandas groupby object? 【发布时间】:2018-10-14 12:59:18 【问题描述】:我有一个 groupby 对象:
col1 col2 x y z
0 A D1 0.269002 0.131740 0.401020
1 B D1 0.201159 0.072912 0.775171
2 D D1 0.745292 0.725807 0.106000
3 F D1 0.270844 0.214708 0.935534
4 C D1 0.997799 0.503333 0.250536
5 E D1 0.851880 0.921189 0.085515
如何将 groupby 对象排序为以下:
col1 col2 x y z
0 A D1 0.269002 0.131740 0.401020
1 B D1 0.201159 0.072912 0.775171
4 C D1 0.997799 0.503333 0.250536
2 D D1 0.745292 0.725807 0.106000
5 E D1 0.851880 0.921189 0.085515
3 F D1 0.270844 0.214708 0.935534
然后计算 A 行 x, y, z 和 B 行 x, y, z、B 行 x, y, z 和 C 行 x, y, z 之间的均值。 . 这样我就有了:
col1 col2 x_mean y_mean z_mean
0 A-B D1 0.235508 0.102326 0.58809
1 B-C D1 ... ... ...
4 C-D D1 ... ... ...
2 D-E D1 ... ... ...
5 E-F D1 ... ... ...
3 F-A D1 ... ... ...
我基本上是在尝试通过计算找到六边形结构的顶点之间的中点(嗯......更像是 1000 万)。提示赞赏!
【问题讨论】:
【参考方案1】:我相信您需要 groupby
和 rolling
并聚合 mean
,最后一对使用 shift
并删除每个组的第一个 NaN
s 行:
print (df)
col1 col2 x y z
0 A D1 0.269002 0.131740 0.401020
1 B D1 0.201159 0.072912 0.775171
2 D D1 0.745292 0.725807 0.106000
3 F D2 0.270844 0.214708 0.935534 <-change D1 to D2
4 C D2 0.997799 0.503333 0.250536 <-change D1 to D2
5 E D2 0.851880 0.921189 0.085515 <-change D1 to D2
#
df = (df.sort_values(['col1','col2'])
.set_index('col1')
.groupby('col2')['x','y','z']
.rolling(2)
.mean()
.reset_index())
df['col1'] = df.groupby('col2')['col1'].shift() + '-' + df['col1']
df = df.dropna(subset=['col1','x','y','z'], how='all')
#alternative
#df = df[df['col2'].duplicated()]
print (df)
col2 col1 x y z
1 D1 A-B 0.235081 0.102326 0.588095
2 D1 B-D 0.473226 0.399359 0.440586
4 D2 C-E 0.924840 0.712261 0.168026
5 D2 E-F 0.561362 0.567948 0.510524
【讨论】:
是的! .rolling() 是我的问题的答案。以上是关于pandas groupby对象中n和n + 1行之间的平均值?的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用sort_values函数和groupby函数获取每个分组数值最小的前N行数据(n rows with smallest column value in each group)
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用tail函数获取每个分组数据中每个分组的最后面N行样本
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用head函数获取每个分组数据中每个分组的最前面N行样本
pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用nth函数获取每个分组数据中每个分组的第N+1个样本(N=0的时候为第一个样本)