我有一个数据框,其形状为(7500,2000),其值从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的数字,因为它们大多数为零,因此,如果逻辑如下,将不胜感激。
答案 0 :(得分:1)
您可以执行以下操作。使用以下示例数据框:
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
答案 1 :(得分:1)
基于亚历山大的出色回答,我不确定他是否正确解释了您的问题。
如果您需要构建一个包含单个列的新数据框(或要将该列附加到现有数据框),请提供以下解决方案:
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))