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

时间:2019-12-05 11:57:53

标签: python pandas plot distribution

我有一个熊猫数据框,其中有列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)

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

4 个答案:

答案 0 :(得分:3)

您不需要执行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')

enter image description here

答案 1 :(得分:0)

df['perc'] = (df['A'] - df['B']) *100/df['A']

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

这就是您要寻找的东西:

In [10]: with open('/tmp/test.txt', 'w') as fh: 
    ...:     for index in np.ndindex(*a.shape): 
    ...:         data = map(str, index + (a[index], b[index])) 
    ...:         fh.write(','.join(data) + '\n')