This question already has answers here:
pandas assign with new column name as string
(2个答案)
上个月关闭。
我写了这段代码,以便可以对任何Pandas DataFrame进行分组,并快速获得分组大小和该数据帧的样本行。
它运作良好,存在一个问题:
新列/索引的名称“ Size”是固定的,因为
我的计划是检查是否存在名为“ Size”的列,如果存在,
为索引使用其他名称。我可以在
字段名称的变量,而不是固定的文本?
我想避免使用骇人的解决方案,例如对列进行多次重命名。
我可以这样称呼
并获得索引为“大小”的结果
(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