Python 从2D数据帧生成单列数据帧

Python 从2D数据帧生成单列数据帧,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据框,它的形状(750020000)由0到7的值组成 0 1 2 3 4 5 6 7 8 9 ... 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0

我有一个数据框,它的形状(750020000)由0到7的值组成

    0   1   2   3   4   5   6   7   8   9   ... 1990    1991    1992    1993    1994    1995    1996    1997    1998    1999
0   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
我想从中创建一个数据框,其中有一列

该值是一个最大计数为1-7的数字,因为其中大多数为零,因此,如果逻辑如下,我将不胜感激

  • 仅在零计数=95%的地方填充零

  • 填充任何数字1-7的最大计数,其中零小于总数的95%
    您可以执行以下操作。使用以下示例数据帧:

    print(df)
    
      1    2    3    4    5    6    7    8    9   10
    0                                                  
    0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    1  0.0  1.0  1.0  1.0  0.0  1.0  2.0  0.0  0.0  0.0
    2  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    3  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    
    def fun(x):
        is_zero = x.quantile(q=0.95) == 0
        if is_zero:
            return x
        else:
            most_common = x[x!=0].value_counts().index[0]
            return np.repeat(most_common, len(x))
    
    df.apply(lambda x: fun(x), axis = 1)
    
        1    2    3    4    5    6    7    8    9   10
    0                                                  
    0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    1  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
    2  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    3  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    

    基于Alexandre的出色回答,我不确定他是否正确地解释了你的问题

    如果您需要构建包含单个列的新数据框(或希望将该列附加到现有数据框),我提供以下解决方案:

    df = original_dataframe
    
    def fun(x):
        is_zero = x.quantile(q=0.95) == 0
        if is_zero:
            return 0
        else:
            number = x[x != 0].value_counts()
            return number[number.index[0]]
    
    # to add a new column to the existing dataset
    df["new_column"] = df.apply(lambda x: fun(x), axis = 1) 
    
    # to build a new dataframe
    new_dataframe = pd.DataFrame(df.apply(lambda x: fun(x), axis = 1)) 
    

    “填充任何数字1-7的最大计数”表示您希望计数最多的单个数字的计数,或所有数字的总和不同于0?