由于 pandas 无法在多维度上工作,因此我通常按行堆叠数据并使用虚拟列来标记数据维度。现在,我需要将一个维度除以另一个维度。
例如,给定此数据框,其中键定义尺寸
index key value
0 a 10
1 b 12
2 a 20
3 b 15
4 a 8
5 b 9
我想实现这个:
index key value ratio_a_b
0 a 10 0.833333
1 b 12 NaN
2 a 20 1.33333
3 b 15 NaN
4 a 8 0.888889
5 b 9 NaN
有没有办法使用groupby来做到这一点?
最佳答案
为此,您实际上不需要(也不应该使用)groupby
:
# interpolate the b values
s = df['value'].where(df['key'].eq('b')).bfill()
# mask the a values and divide
# change to df['key'].ne('b') if you have many values of a
df['ratio'] = df['value'].where(df['key'].eq('a')).div(s)
输出:
index key value ratio
0 0 a 10 0.833333
1 1 b 12 NaN
2 2 a 20 1.333333
3 3 b 15 NaN
4 4 a 8 0.888889
5 5 b 9 NaN
关于python - 使用groupby对pandas中的多维度数据进行划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57890031/