python - 根据另一列中的 2 行计算列行

标签 python pandas pandas-groupby

我想计算一列中的两行与新列之间的差异

(Y(A1)/X(A1))-(Y(A1)/X(A1))/(Y(A1)/X(A1))*100% (3/52-1/41)/(1/41)*100% = 57.72%

附加的代码可以正常工作,但最后一行由于某种原因被删除

c = c.rename(lambda x: (x)*2+1)
c = c.map('{:,.2f}%'.format)
df['Z']=c

预期结果:

    X   Y   Z
A1  41  1   
A2  52  3   57.72%
B1  74  6   
B2  74  4   -50.00%
C1  5   0   
C2  5   0   nan%
D1  120 7   
D2  131 7   -9.17%

我实际得到的是:

    X   Y   Z
A1  41  1   
A2  52  3   57.72%
B1  74  6   
B2  74  4   -50.00%
C1  5   0   
C2  5   0   nan%
D1  120 7   
D2  131 7

最佳答案

使用GroupBy.pct_change按由 numpy.arange 创建的 1d 数组的整数除法创建的每 2 行的组:

print (np.arange(len(df)) // 2)
[0 0 1 1 2 2 3 3]

df['Z1'] = df['X'].div(df['Y']).groupby(np.arange(len(df)) // 2).pct_change().mul(-100)
print (df)

      X  Y        Z         Z1
A1   41  1      NaN        NaN
A2   52  3   57.72%  57.723577
B1   74  6      NaN        NaN
B2   74  4  -50.00% -50.000000
C1    5  0      NaN        NaN
C2    5  0     nan%        NaN
D1  120  7      NaN        NaN
D2  131  7   -9.17%  -9.166667

另一个解决方案:

s1 = df['X'].div(df['Y'])
df['Z1'] = (1-s1[1::2] / s1[::2].values).mul(100)
print (df)

      X  Y        Z         Z1
A1   41  1      NaN        NaN
A2   52  3   57.72%  57.723577
B1   74  6      NaN        NaN
B2   74  4  -50.00% -50.000000
C1    5  0      NaN        NaN
C2    5  0     nan%        NaN
D1  120  7      NaN        NaN
D2  131  7   -9.17%  -9.166667

如果需要不匹配值的缺失值,请使用 mapif-else 以避免将缺失值转换为字符串:

s = df['X'].div(df['Y']).groupby(np.arange(len(df)) // 2).pct_change().mul(-100)
df['Z1'] = s.map(lambda x: '{:,.2f}%'.format(x) if x == x else np.nan)
print (df)

      X  Y        Z       Z1
A1   41  1      NaN      NaN
A2   52  3   57.72%   57.72%
B1   74  6      NaN      NaN
B2   74  4  -50.00%  -50.00%
C1    5  0      NaN      NaN
C2    5  0     nan%      NaN
D1  120  7      NaN      NaN
D2  131  7   -9.17%   -9.17%

关于python - 根据另一列中的 2 行计算列行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313933/

相关文章:

python - pandas (sub)Dataframe 中的最大值和最小值

python - 应用具有多个参数的函数,包括 python 数据框中 groupby 上一行的值

python - 如何从Python中的图像目录创建视频文件

python - 我应该将图像上传到 Django 中的静态目录吗?

python - 使用 Pandas 动态创建数据框

python - 在循环内保存 pandas 合并

python - 如何用零填充 pandas groupby 列表的缺失日期?

python - 如何将复杂矩阵保存在文件中?

python - 为什么 BeautifulSoup (在 Python 脚本中)只返回 HTML 中的一些数字

python-2.7 - Pandas 根据当前值更新列