如何循环遍历系列以生成数据框并向其中添加列?

我有一堆系列要堆叠,制作一个数据框,然后通过相同的过程将其他系列添加到该数据框。


我已经在 jupyter notebook 中一步一步地完成了它,但是当我尝试在 jupyter notebook 中创建一个 for 语句和一个函数来做我可以做的事情(逐步)时,程序失败给我一个错误。


代码:


import pandas as pd


data = {'sum':[140.0, 45.0, 17907.0], 'mean':[35.00, 11.25, 4476.75],'count':[4, 4, 4]}

df = pd.DataFrame(data, index=['age', 'offspring', 'total_pop'])

data2 = {'sum':[14.0, 46.0, 14607.0], 'mean':[345.00, 121.25, 5476.75], 'count':[2, 2, 2]}

df2 = pd.DataFrame(data2, index=['age', 'offspring', 'total_pop'])

data3 = {'sum':[528.0, 15.0, 1407.0], 'mean':[700.00, 552.25, 4156.75], 'count':[3, 3, 3]}

df3 = pd.DataFrame(data3, index=['age', 'offspring', 'total_pop'])


def dosomething(df):

        stacked = df.stack()

        df = pd.Series(stacked)

        df.to_frame()

        dfd = pd.DataFrame(df)

        df = df.join(dfd)

        print(dfd)


total_df = [(df1), (df2), (df3,)]


for n in range(0, len(total_df)):

        total_df[n] = dosomething(total_df[n])

预期:


                      1         2        3

age       sum      140.00     14.00   528.00

          mean      35.00    345.00   700.00

          count      4.00      2.00     3.00

offspring sum       45.00     46.00    15.00

          mean      11.25    121.25   552.25

          count      4.00      2.00     3.00

total_pop sum    17907.00  14607.00  1407.00

          mean    4476.75   5476.75  4156.75

          count      4.00      2.00     3.00

实际错误:


ValueError:列重叠但未指定后缀:RangeIndex(start=0, stop=1, step=1)


暮色呼如
浏览 133回答 3
3回答

Qyouu

尝试concat:dfs = [df,df2, df3]pd.concat([df.stack() for df in dfs], axis=1)输出:                        0         1        2age       sum      140.00     14.00   528.00          mean      35.00    345.00   700.00          count      4.00      2.00     3.00offspring sum       45.00     46.00    15.00          mean      11.25    121.25   552.25          count      4.00      2.00     3.00total_pop sum    17907.00  14607.00  1407.00          mean    4476.75   5476.75  4156.75          count      4.00      2.00     3.00

慕斯709654

如果您不需要循环,这将起作用:# stack dataframesdf = pd.DataFrame(df.stack(), columns=[1])df2 = pd.DataFrame(df2.stack(), columns=[2])df3 = pd.DataFrame(df3.stack(), columns=[3])#join on indexfinal_df = df.join(df2).join(df3)如果您需要使用循环,您可以这样做:# stack first dffinal_df = pd.DataFrame(df.stack(), columns=[1])# loop through other dfsfor n, next_df in {2: df2, 3: df3}.items():    next_df = pd.DataFrame(next_df.stack(), columns=[n])    final_df = final_df.join(next_df)

慕丝7291255

您可以使用pd.concatwith 选项在决赛上keys做一个,而不是每个stackdfstackdfdf_list = [df, df2, df3]pd.concat(df_list, keys=range(len(df_list)), axis=1).stack()Out[127]:                        0         1        2age       sum      140.00     14.00   528.00          mean      35.00    345.00   700.00          count      4.00      2.00     3.00offspring sum       45.00     46.00    15.00          mean      11.25    121.25   552.25          count      4.00      2.00     3.00total_pop sum    17907.00  14607.00  1407.00          mean    4476.75   5476.75  4156.75          count      4.00      2.00     3.00
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python