2017-09-26 115 views
0

不知道如何正確短語這一點,但這裏有雲:Python中創建一個數據幀

什麼是在Python中創建一列數據幀保存一和零的最簡單的方法,而長度由一些被確定輸入?

例如,假設我的樣本量爲1000,其中有100個成功(個)。零的數量將是樣本大小(即1000)減去成功。因此,輸出將是一個長度爲1000的df,其中100行包含1,而900包含0。

+0

它是爲了或隨機的? –

+0

沒有要求 - 可能是兩個。 – user8674713

回答

0

從你所描述的,一個簡單的list會做的伎倆。否則,您可以使用numpy.arraypandas.DataFrame/pandas.Series(更多表格)。

import numpy as np 
import pandas as pd 

input_length = 1000 

# List approach: 
my_list = [0 for i in range(input_length)] 
# Numpy array: 
my_array = np.zeros(input length) 
# With Pandas: 
my_table = pd.Series(0, index=range(input_length)) 

所有這些創建一個零向量,然後你可以隨心所欲地分配成功(一)。如果這些遵循一些已知的分佈,則numpy也有方法來生成隨機向量(see here)。

如果你真的在尋找熊貓的方法,它也可以結合以前的方法。這是,您可以將listnumpy.array指定爲Series/DataFrame的值。例如,想象一下,想要繪製1000個p = 0.5的二項分佈隨機樣本:

p=0.5 
my_data = pd.Series(np.random.binomial(1, p, input_length)) 
0

除了N.P.的回答。你可以做這樣的事情:

import pandas as pd 
import numpy as np 

def generate_df(df_len): 

    values = np.random.binomial(n=1, p=0.1, size=df_len) 
    return pd.DataFrame({'value': values}) 

df = generate_df(1000) 

編輯:

更完整的功能:

def generate_df(df_len, option, p_success=0.1): 
    ''' 
    Generate a pandas DataFrame with one single field filled with 
    1s and 0s in p_success proportion and length df_len. 
    Input: 
     - df_len: int, length of the 1st dimension of the DataFrame 
     - option: string, determines how will the sample be generated 
      * random: according to a bernoully distribution with p=p_success 
      * fixed: failures first, and fixed proportion of successes p_success 
      * fixed_shuffled: fixed proportion of successes p_success, random order 
     - p_success: proportion of successes among total 
    Output: 
     - df: pandas Dataframe 
    ''' 

    if option == 'random': 
     values = np.random.binomial(n=1, p=p_success, size=df_len) 

    elif option in ('fixed_shuffled', 'fixed'): 

     n_success = int(df_len*p_success) 
     n_fail = df_len - n_success 

     values = [0]*n_fail + [1]*n_success 

     if option == 'fixed_shuffled': 
      np.random.shuffle(values) 

    else: 
     raise Exception('Unknown option: {}'.format(option)) 

    df = pd.DataFrame({'value': values}) 

    return df