在Python中创建数据帧

2024-06-27 02:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

不知道如何正确表达,但这里是:

在Python中创建一个包含1和0的单列数据帧的最简单方法是什么,长度由一些输入决定?你知道吗

例如,假设我有1000个样本,其中100个是成功的。零的数量将是样本量(即1000)减去成功数。所以输出将是一个长度为1000的df,其中100行包含1,900行包含0。你知道吗


Tags: 数据方法df数量样本样本量
2条回答

除了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

从你所描述的,一个简单的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))

所有这些都创建了一个零向量,然后您可以随意分配成功(1)。如果这些是遵循一些已知的分布,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))

相关问题 更多 >