基于同一行中的值在pandas中进行多次分配

时间:2017-11-21 17:08:53

标签: python pandas

我在这里发现了这篇文章: Pandas: How to use apply function to multiple columns

我正在表演类似的事情。我有以下列:[' vol_a',' vol_b',' vol_c'](但还有更多),我写的是转换这些值的函数进入队伍。我有兴趣创建包含名称[' vol_rank_a',' vol_rank_b',' vol_rank_c']的新列,并将这些列分配给该函数的标准化排名值。

按照上述帖子的逻辑,我尝试做了类似的事情:

data[new_cols] = data.apply(apply_vol_ranking,axis=1)

其中apply_vol_ranking()定义为:

def apply_vol_ranking(row):
    vols = get_vols_from_row(row)

    vols = get_normalized_vol(vols)

    return vols

其中get_vols_from_row(row)定义为:

def get_vols_from_row(row):
    vol_cols = [col for col in row.index if col.startswith("vol_")]

    values = []
    for col in vol_cols: values.append(row[col])
    return values

get_normalized_vol() as:

def get_normalized_vol(vol_list):
    assert any(isinstance(vol_list,type_) for type_ in [list,np.ndarray])

    d = len(vol_list)+1
    ranked = scipy.stats.rankdata(vol_list)

    if all(math.isnan(vol) for vol in vol_list):
        ranked = [0 for vol in vol_list] # np.nan gets the last rank. Works here, but not in slopes.
    else:
        ranked = [rank/d for rank in ranked]

    return ranked

我得到的KeyError不在索引中。我打赌这是因为我试图将多个值分配给多个列。 (哦和new_cols只是一个类似[' vol_rank_a',' vol_rank_b',' vol_rank_c'])的列表。

因此,为了将所有内容都放在透视图中,每一行都有一些' vol _ *'列。我对所有这些感兴趣,我对它们进行排名并使它们正常化。对于同一行,我现在要将它们保存在' vol_rank _ *'

的名称下

0 个答案:

没有答案