我有一个熊猫数据框,其中有列A
和B
我只想绘制A
和B
列之间差异百分比的分布图
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)
这不起作用,因为我是新手,请帮忙
答案 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')
答案 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')