pandas 函数不适用于两个 Dataframe

f45qwnt8  于 2023-10-14  发布在  其他
关注(0)|答案(2)|浏览(100)

我有一个这样的功能:

def percent(a, b): 
    dataframes_list = [a, b]
    for df in dataframes_list:
        df.rename(columns={'A': 'q1', 'B': 'q2', 'C': 'q3', 'D': 'q4', 'E': 'q5', 'F': 'q6'},  inplace = True)
        df = (df.filter(like = 'q').groupby([df['Name'], 
            df['Type'],df['Date']]).agg(lambda x: x.eq(4).sum()/x.count()))
        df = df.reset_index()
        df = pd.melt(df, id_vars=['Name','Type','Date'], value_vars= ['q1','q2','q3','q4','q5','q6'])
        df.rename(columns = {'value':'percent'}, inplace = True)
        return df

percent_df = percent(a, b)
print(percent)

我想把这个函数应用到两个括号'a'和'b'上。该函数应该对两个嵌套框进行必要的更改。上面的print语句只打印出了对象a,而没有打印出对象b。此外,框架'a'似乎没有函数应该做的更改。这是怎么回事?

dfty9e19

dfty9e191#

首先,你的缩进是一团糟,所以很难确定这是否是问题的根本原因。
也就是说,看起来你的return被放置在for循环中,所以它会在处理第一个DF后退出。试试这个:

def percent(a, b):
    dataframes_list = [a, b]
    for df in dataframes_list:
        df.rename(columns={'A': 'q1', 'B': 'q2', 'C': 'q3', 'D': 'q4', 'E': 'q5', 'F': 'q6'}, inplace=True)
        df = (df.filter(like='q').groupby(
            [df['Name'], df['Type'], df['Date']]
        ).agg(lambda x: x.eq(4).sum() / x.count()))
        df = df.reset_index()
        df = pd.melt(
            df,
            id_vars=['Name', 'Type', 'Date'],
            value_vars=['q1', 'q2', 'q3', 'q4', 'q5', 'q6']
        )
        df.rename(columns={'value': 'percent'}, inplace=True)
    return df

percent_df = percent(a, b)
print(percent)
ecfdbz9o

ecfdbz9o2#

你是在循环的第一次迭代结束时返回的,所以它永远不会处理第二个嵌套框。
将所有修改过的字符串收集到一个列表中并返回。

def percent(*dfataframes_list): 
    results = []
    for df in dataframes_list:
        df.rename(columns={'A': 'q1', 'B': 'q2', 'C': 'q3', 'D': 'q4', 'E': 'q5', 'F': 'q6'},  inplace = True)
        df = (df.filter(like = 'q').groupby([df['Name'], 
                                             df['Type'],df['Date']]).agg(lambda x: x.eq(4).sum()/x.count()))
        df = df.reset_index()
        df = pd.melt(df, id_vars=['Name','Type','Date'], value_vars= ['q1','q2','q3','q4','q5','q6'])
        df.rename(columns = {'value':'percent'}, inplace = True)
        results.append(df)
    return results

new_a, new_b = percent(a, b)
print(new_a, new_b)

相关问题