Pandas 使用Seaborn生成CDF图

Pandas 使用Seaborn生成CDF图,pandas,simulation,seaborn,Pandas,Simulation,Seaborn,我正在尝试使用Seaborn为我的代码绘制CDF图,但无法使其工作 具体来说,我想在模拟整个代码1000次之后,为sum_MDA、sum_CLA、sum_BIA和grand_total生成CDF图。我的代码如下,敬请原谅 def sim(): df['RAND'] = np.random.uniform(0,1, size=df.index.size) dfRAND = list(df['RAND']) def L(): result = []

我正在尝试使用Seaborn为我的代码绘制CDF图,但无法使其工作

具体来说,我想在模拟整个代码1000次之后,为sum_MDA、sum_CLA、sum_BIA和grand_total生成CDF图。我的代码如下,敬请原谅

def sim():

    df['RAND'] = np.random.uniform(0,1, size=df.index.size)
    dfRAND = list(df['RAND'])

    def L():
        result = []
        conditions = [df.RAND >= (1 - 0.8062), (df.RAND < (1 - 0.8062)) & (df.RAND >= 0.1),
                              (df.RAND < 0.1) & (df.RAND >= 0.05), (df.RAND < 0.05) & 
                              (df.RAND >= 0.025), (df.RAND < 0.025) & (df.RAND >= 0.0125), 
                              (df.RAND < 0.0125)]
        choices = ['L0', 'L1', 'L2', 'L3', 'L4', 'L5']
        df['L'] = np.select(conditions, choices)
        result = df['L'].values
        return result
    L()
    #print(L())
    #print(df.pivot_table(index='L', aggfunc=len, fill_value=0))

    def MD():
        result = []
        conditions = [L() == 'L0', L() == 'L1', L() == 'L2', L() == 'L3', 
                  L() == 'L4', L() == 'L5']
        choices = [(df['P_MD'].apply(lambda x: x * 0.02)), (df['P_MD'].apply(lambda x: x * 0.15)),
               (df['P_MD'].apply(lambda x: x * 0.20)), (df['P_MD'].apply(lambda x: x * 0.50)),
               (df['P_MD'].apply(lambda x: x * 1.0)), (df['P_MD'].apply(lambda x: x * 1.0))]
        df['MDL'] = np.select(conditions, choices)
        #result = print(df['MDL'].values)
        return result
    MD()

    def CL():
        result = []
        conditions = [L() == 'L0', L() == 'L1', L() == 'L2', L() == 'L3', L() == 'L4', 
                  L() == 'L5']
        choices = [1600, 3200, 9600, 48000, 48000, 48000]
        df['CL'] = np.select(conditions, choices)
        #result = print(df['CL'].values)
        return result
    CL()

    def BI():
        result = []
        conditions = [L() == 'L0', L() == 'L1', L() == 'L2', L() == 'L3', 
                  L() == 'L4', L() == 'L5']
        choices = [(df['P_BI'].apply(lambda x: (x / 548) * 1)),
               (df['P_BI'].apply(lambda x: (x / 548) * 2)),
               (df['P_BI'].apply(lambda x: (x / 548) * 14)),
               (df['P_BI'].apply(lambda x: (x / 548) * 60)),
               (df['P_BI'].apply(lambda x: (x / 548) * 180)),
               (df['P_BI'].apply(lambda x: (x / 548) * 365))]
        df['BIL'] = np.select(conditions, choices)
        #result = print(df['BIL'].values)
        return result
    BI()

    sum_MDA = int(np.sum(df['MDL']))
    sum_CLA = int(np.sum(df['CL']))
    sum_BIA = int(np.sum(df['BIL']))
    grand_total = int(sum_MDA + sum_CLA + sum_BIA)

    result = sum_MDA, sum_CLA, sum_BIA, grand_total
    return result

sim()

for i in range(1000):
    print(sim())

#sns.distplot(sim(), bins=100,
     #kde_kws=dict(cumulative=True), axlabel='(£)',  color='purple', 
     #).set_title('Simulation (N=1000)')

感谢您的帮助。非常感谢。

如上所述,您正在将整个数据帧传递给Seaborn。您希望传递一个特定的列,如sim['MDL']

看一个关于我问题的例子

在版本0.11.0中添加为sns.ecdfplot!

函数sim中定义的所有函数都返回数据帧,但您不保存任何返回的数据帧;您在每个定义之后调用每个函数,它们会按预期执行,但结果会被丢弃。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = pd.DataFrame({'A':np.random.randint(0, 100, 1000)})    

f, ax = plt.subplots(figsize=(8, 8))
ax = sns.kdeplot(df1['A'], cumulative=True)

plt.show()