Python 遍历列并划分列值,创建新列,结果为列

Python 遍历列并划分列值,创建新列,结果为列,python,pandas,dataframe,Python,Pandas,Dataframe,我正在处理人口普查数据,这些列提供了年龄组,而不是离散的年龄。为了按代处理数据(千禧一代、婴儿潮一代等等),我需要将这些数据转换为一年。(即,一列用于5-9岁年龄段,而不是一列用于5岁年龄段,一列用于6岁年龄段等) 因为我只是想确定趋势,所以我可以将每个年龄组平均分割,得到每年的离散值 我希望遍历每个列,并创建5个新列,每个列的原始列值除以5(因为每个组有5年) 我尝试将新列名和要等分的列的索引的变量都设置为零 然后,我编写了一个for循环来迭代数据帧中的每一列。在这个循环中,我有一个嵌套的fo

我正在处理人口普查数据,这些列提供了年龄组,而不是离散的年龄。为了按代处理数据(千禧一代、婴儿潮一代等等),我需要将这些数据转换为一年。(即,一列用于5-9岁年龄段,而不是一列用于5岁年龄段,一列用于6岁年龄段等)

因为我只是想确定趋势,所以我可以将每个年龄组平均分割,得到每年的离散值

我希望遍历每个列,并创建5个新列,每个列的原始列值除以5(因为每个组有5年)

我尝试将新列名和要等分的列的索引的变量都设置为零

然后,我编写了一个for循环来迭代数据帧中的每一列。在这个循环中,我有一个嵌套的for循环,因此它对每一列执行5次操作。然后,我在内部for循环中每次增加新列名的n值,并在外部for循环中增加被划分的列的索引的s值循环

df = pd.DataFrame([[6.8, 6.5], [5.2, 8.9], [6.4, 7.6]], columns= ['Under 5 years', '5 to 9 years'])

## Set up variables. 'n' is for the new column name. 's' is the index of the column to be divided.

n= 0 
s = 0

## For loop to iterate through each column in the dataframe and perform the operation on each column 5 times before moving onto the next column:

for s in df.iteritems():
    for i in range(5):
        df['{}'.format(n)].iloc = df[s].iloc/5
        n+=1 
     s+=1
我一直收到一个类型错误:在5年以下,dtype:float64)“是一个无效的密钥

我不知道如何解决这个错误,或者代码的其余部分是否可以正常工作

所需的输出将是以下数据帧:

df = pd.DataFrame([[6.8, 6.5, 1.36, 1.36, 1.36, 1.36, 1.36, 1.3, 1.3, 1.3, 1.3, 1.3], [5.2, 8.9, 1.04, 1.04, 1.04, 1.04, 1.04, 1.78, 1.78, 1.78, 1.78, 1.78], [6.4, 7.6, 1.28, 1.28, 1.28, 1.28, 1.28, 1.52, 1.52, 1.52, 1.52, 1.52]], columns=['Under 5 years', '5 to 9 years', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])

这一行
df['{}'。格式(n)]。iloc=df[s]。iloc/5
完全错误:

  • s
    不是列名,而是一对
    (列名,列)
    ,因此它不能用于索引数据帧
  • iloc
    也是错误的,而且毫无用处
  • 更改您正在迭代的内容是非常危险的,因此在df.iteritems()中的
    for s:
    循环中,您不应该向
    df
根据预期结果,您需要的是:

cols = df.columns.tolist()
for j, s in enumerate(cols):  # ok cols is a plain list
    for i in range(5):
        df[str(i + 5*j)] = df[s]/5

这一行
df['{}'。格式(n)]。iloc=df[s]。iloc/5
完全错误:

  • s
    不是列名,而是一对
    (列名,列)
    ,因此它不能用于索引数据帧
  • iloc
    也是错误的,而且毫无用处
  • 更改您正在迭代的内容是非常危险的,因此在df.iteritems()中的
    for s:
    循环中,您不应该向
    df
根据预期结果,您需要的是:

cols = df.columns.tolist()
for j, s in enumerate(cols):  # ok cols is a plain list
    for i in range(5):
        df[str(i + 5*j)] = df[s]/5
为什么不直接使用

为什么不直接使用


请为您的问题提供解决方案。请参阅有关创建的链接,以便我们知道如何帮助您better@G.Anderson完成。谢谢你的链接。在提供输入的情况下,你想要的输出是什么?您的问题并不完全清楚什么是
df_编号
?@G.Anderson已更新以包含所需的df输出请为您的问题提供答案。请参阅有关创建的链接,以便我们知道如何帮助您better@G.Anderson完成。谢谢你的链接。在提供输入的情况下,你想要的输出是什么?从您的问题中还不完全清楚什么是
df_编号
?@G.Anderson更新以包含所需的df输出