This question already has answers here:
pandas assign with new column name as string
                                
                                    (2个答案)
                                
                        
                                上个月关闭。
            
                    
我写了这段代码,以便可以对任何Pandas DataFrame进行分组,并快速获得分组大小和该数据帧的样本行。

它运作良好,存在一个问题:
新列/索引的名称“ Size”是固定的,因为.assign( ... )命令不带变量。因此,如果我的DataFrame有一个名为“ Size”的列,它将丢失。

我的计划是检查是否存在名为“ Size”的列,如果存在,
为索引使用其他名称。我可以在assign命令中使用
字段名称的变量,而不是固定的文本?

我想避免使用骇人的解决方案,例如对列进行多次重命名。

import pandas as pd
try:
    from pandas.api.extensions import register_dataframe_accessor
except ImportError:
    raise ImportError('Pandas 0.24 or better needed')

@register_dataframe_accessor("cgrp")
class CustomGrouper:
    """Extra methods for dataframes."""

    def __init__(self, df):
        self._df = df

    def group_sample(self, by, subset=None):
        result = (self._df.groupby(by).apply(lambda x: x.sample(1).assign(Size = len(x)))).set_index('Size').sort_index(ascending=False)
        return result


我可以这样称呼

df.cgrp.group_sample(by=['column1', ... ])


并获得索引为“大小”的结果

最佳答案

只需创建一个执行您想要的功能并将其应用于groupby

def sample_group(df):
    sample = df.sample(n=1)
    size = len(df)
    if 'Size' in df.columns:
        index_name = 'Size2'  # do whatever you want here for name (random)
    else:
        index_name = 'Size'
    sample[index_name] = size
    return sample.set_index(index_name)

df.groupby(['group']).apply(lambda x: sample_group(x))

关于python - 我可以将Pandas Dataframe.assign(…)与变量名一起使用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59865432/

10-13 04:07