获取熊猫汇总行值的样本

时间:2018-11-15 16:55:22

标签: python pandas

我需要一个给定数据帧和数字UIView()的数据结构,该数据帧具有num行,以便每一行都具有以下值: -对于具有字符串值的列,我们从原始表中的列中采样值 -对于具有浮点数或整数的列,我们可以找到平均值

这是我的代码

num

由于某些原因,行包含nan值并且超过了def rows_aggr(df, num): dataframe = None for i in range(0, num): row = None for cname in df.columns.values: column = df[cname] dfcol = Series.to_frame(column) if column.dtype != np.number: item = dfcol.sample(n=1) else: item = dfcol.mean(axis=1) if row is None: row = item else: row = pd.concat([row, item], axis=1) if dataframe is None: dataframe = row else: dataframe = pd.concat([dataframe, row], axis=0) return dataframe ...,并且此代码似乎无法正常工作。如果您知道实现我所需要的更好的方式,我将很高兴知道。

对于

num

我们会得到

df = pd.DataFrame({'col1':list('abcdef'),'col2':range(6)}) and num=3

假设和c, 2.5 f, 2.5 b, 2.5 是随机选择的

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎有一个错误,表明条件column.dtype != np.number不起作用。然后,当您进行pd.concat([row, item], axis=1)时,索引对齐会出现问题,item包含的索引编号并不总是相同,并且会在Nan中添加带有row的行。这是另一种方法。

设置

df = pd.DataFrame({'col1':list('abcdef'),'col2':list('ijklmn'),
                   'col3':range(6),'col4':np.arange(10,16)/1.5})
print (df)
  col1 col2  col3       col4
0    a    i     0   6.666667
1    b    j     1   7.333333
2    c    k     2   8.000000
3    d    l     3   8.666667
4    e    m     4   9.333333
5    f    n     5  10.000000

您可以使用select_dtypes检查列是否不是数字,并使用字典理解来创建数据框,例如:

def rows_aggr(df, num):
    list_col_notnumeric = df.select_dtypes(exclude=[np.number]).columns
    return pd.DataFrame({col: df[col].sample(num).values
                              if col in list_col_notnumeric  
                              else df[col].mean() 
                         for col in df.columns})

print (rows_aggr(df, 3))
  col1 col2  col3      col4
0    d    i   2.5  8.333333
1    a    n   2.5  8.333333
2    c    j   2.5  8.333333