如何基于标签将一个数据帧分割成多个数据帧,然后对每个数据帧进行计算?

2024-09-29 23:31:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

1

我试图为df1['Tub'中的每个唯一值创建一个数据帧。现在,我正在创建一个字典,并尝试在每个新的DataFrame实例中添加一个匹配的Tub。我认为我的逻辑是正确的

tub_df = {}

tubs = []

for tub in df1['Tub']:
    if tub not in tubs:
        tubs.append(tub)
#['Tub 1', 'Tub 2', 'Tub 3']

for tub_name in tubs:
    for tub_row in df1['Tub']:
        if tub_row == tub_name:
            tub_df[tub] = pd.DataFrame.copy(df1.loc[tub_row])

谢谢你的帮助


Tags: 数据实例nameindataframedfforif
2条回答

这是一个较短的版本,在Tub中标识唯一值&;使用dict comprehension创建过滤的dict

{tub: df1[df1.Tub.eq(tub)] for tub in df1.Tub.unique()}

基于问题标题,特别是“并为每个数据帧进行计算”部分,听起来您正在寻找pandas groupby功能。例如,如果要计算每个桶的所有列的平均值,可以执行以下操作:

df1.groupby('Tub').agg('mean')

或者,如果希望将每个组作为单独的数据帧进行循环:

for key, group in df1.groupby('Tub'):
    # Do some calculation where key is the Tub and group is a data frame containing values for matching tubs
    print(key, group)

编辑附加请求:
要将通用函数应用于每个组,您可以定义该函数,然后使用pandas.core.groupby.GroupBy.apply,例如:

def drop_last(frame):
    return frame.iloc[:-1,:]

df1.groupby('Tub').apply(drop_last)

这将返回一个数据帧,其中每个组中的最后一项都已删除

相关问题 更多 >

    热门问题