pandas 如何按索引将单列 Dataframe 拆分为多列

vulvrdjw  于 2022-11-05  发布在  其他
关注(0)|答案(4)|浏览(215)

我已经浏览了一些答案,但还没有找到确切的东西,我正在寻找尚未。
我有一个Pandas Dataframe ,它有一个单列,结构如下(示例)

0 alex
1 7 
2 female
3 nora
4 3
5 female 
...
999 fred 
1000 15 
1001 male

我想将这一列拆分为3列,分别包含姓名、年龄和性别。看起来像这样:

name  age  gender
0 alex  7    female
1 nora  3    female
...
100 fred 15  male

有办法做到这一点吗?我在考虑使用索引,但不确定实际如何做到这一点

fdbelqdn

fdbelqdn1#

考虑unstack

import pandas as pd

df = pd.DataFrame(["alex", 7, "female", "nora", 3, "female", "fred", 15, "male"])

people = range(len(df) // 3)
attributes = ["name", "age", "gender"]

multi_index = pd.MultiIndex.from_product([people, attributes])

df.set_index(multi_index).unstack(level=1).droplevel(level=0, axis=1).reindex(columns=attributes)

输出量:

name age  gender
0  alex   7  female
1  nora   3  female
2  fred  15    male
ar5n3qh5

ar5n3qh52#

这里有一种方法
第一个

rqmkfv5c

rqmkfv5c3#

假设“0”是您的列名:

list_a = list(df[0])
a  = np.array(list_a).reshape(-1, 3).tolist()
df2= pd.DataFrame(a,columns = ["name", "age","gender"])
trnvg8h3

trnvg8h34#

这也许不是最有效的解决方案,但您可以使用pd.concat()并将它们全部放在一起,如果它们始终按顺序排列的话:

df = pd.DataFrame({'Value':['alex',7,'female','nora',3,'female','fred',15,'male']})
df2 = pd.concat([df[(df.index + x) % 3 == 0].reset_index(drop=True) for x in range(3)],axis=1)
df2.columns = ["name", "gender", "age"]

退货:

name    gender  age
0   alex    female  7
1   nora    female  3
2   fred    male    15

相关问题