绘制两个 pandas 数据框列之间差异的分布图

Plot distribution of differences between two pandas dataframe columns

我有一个 pandas 数据框,其中包含列 AB

我只想绘制列 AB

之间差异百分比的分布图
        A                B
  1 1.051990e+10    1.051990e+04
  2 1.051990e+10    1.051990e+04
  5 4.841800e+10    1.200000e+10
  8 2.327700e+10    2.716000e+10
  9 1.204900e+10    2.100000e+08

分布图是这样的,有多少条记录有10%的差异,有多少条记录有20%的差异

我试过如下

df percCal(x,y):
  return (x-y)*100/x

df['perc'] = df.apply(lambda x: percCal(df['A'], df['B']), axis=1)

这不起作用,因为我是新手,请帮助

df['perc'] = (df['A'] - df['B']) *100/df['A']
def percCal(x,y):
  return (x-y)*100/x

df['perc'] = df.apply(lambda x: percCal(x['A'], x['B']), axis=1)

dfin lambda 更改为 x 在这种情况下,您为函数提供了数据 x,这意味着您为 percCal 提供了您在数据框的行,当您使用 df 时,您实际上给出了数据框,而函数返回的是数据框而不是值。但是请检查你的代码,如果x在函数中可以为0是有问题的。

认为这就是您要找的:

# Dummy df
data = [
    [1.051990e+10, 1.051990e+04],
    [1.051990e+10, 1.051990e+04],
    [4.841800e+10, 1.200000e+10],
    [2.327700e+10, 2.716000e+10],
    [1.204900e+10, 2.100000e+08],
]
cols = ['A', 'B']

df2 = pd.DataFrame(data, columns=cols)

# Solution
import seaborn as sns

df2['pct_diff'] = (df2['A'] - df2['B']) / df2['A']
sns.distplot(df2['pct_diff']);

您不需要 lambda 操作。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df1 = pd.DataFrame(np.random.randint(1, 10, (20, 2)), columns=['A', 'B'])

def percCal(x,y):
  return (x-y)*100/x

或者,直接操作列:

df1['diff'] = (df1['A'] - df1['B']) * 100 / df1['A']

应用函数并绘图:

df1['diff'] = percCal(df1['A'], df1['B'])
df1['diff'].plot(kind='density')