如何在应用某些功能时以成对方式组合数据框中的行
How to combine rows in a dataframe in a pairwise fashion while applying some function
我有一个数据框,将键存储为 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。
这是生成的数据帧:
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,1,) 取平均值,(id1,1,1) 与 (id1,2,4) 取平均值以形成剩余的 2 行。
我可以想到一个迭代的方法来解决这个问题,但是那会很慢。我怎样才能以正确的 pythonic/pandas 方式做到这一点?
代码:
df = pd.DataFrame(columns=['ID', 'Val1', 'Val2'], data=[['id0', 10, 20], ['id0', 11, 19], ['id1', 5, 5], ['id1', 1, 1], ['id1', 2, 4]])
按ID
分组后可以使用df.rolling
:
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
我有一个数据框,将键存储为 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。
这是生成的数据帧:
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,1,) 取平均值,(id1,1,1) 与 (id1,2,4) 取平均值以形成剩余的 2 行。
我可以想到一个迭代的方法来解决这个问题,但是那会很慢。我怎样才能以正确的 pythonic/pandas 方式做到这一点?
代码:
df = pd.DataFrame(columns=['ID', 'Val1', 'Val2'], data=[['id0', 10, 20], ['id0', 11, 19], ['id1', 5, 5], ['id1', 1, 1], ['id1', 2, 4]])
按ID
分组后可以使用df.rolling
:
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