我已经将XML数据转换为熊猫数据。现在,我希望将数据转到理想的df输出。请帮帮我。
我的电流:
data name
0 Aruba Country or Area
1 Population, total Item
2 1960 Year
3 54211 Value
4 Aruba Country or Area
5 Population, total Item
6 1961 Year
7 55438 Value
8 Aruba Country or Area
9 Population, total Item
10 1962 Year
11 56225 Value
12 Aruba Country or Area
13 Population, total Item
14 1963 Year
15 56695 Value
16 Aruba Country or Area
17 Population, total Item
18 1964 Year
19 57032 Value我是直接粘贴最后一行,我所使用的枢轴。
xml_df = xml_df.pivot(index='data', columns='name')净产出:
Country or Area Year Item Value
Aruba 1960 Population, total 54211
Aruba 1961 Population, total 55348等等。
发布于 2019-09-16 14:42:29
你可以试试groupby on name和cumcount,然后是unstack
df.assign(k=df.groupby('name').cumcount()).set_index(['k','name']).unstack() data
name Country or Area Item Value Year
k
0 Aruba Population, total 54211 1960
1 Aruba Population, total 55438 1961
2 Aruba Population, total 56225 1962
3 Aruba Population, total 56695 1963
4 Aruba Population, total 57032 1964详细信息:cumcount()
df.groupby('name').cumcount()这个按名称和Numbers each item in each group from 0 to the length of that group - 1分组,并使用df.assign()将一个新的列k分配给dataframe。然后使用set_index()设置名称和k列作为索引,这样您就可以得到:
print(df.assign(k=df.groupby('name').cumcount()).set_index(['k','name']))
data
k name
0 Country or Area Aruba
Item Population, total
Year 1960
Value 54211
1 Country or Area Aruba
Item Population, total
Year 1961
Value 55438
2 Country or Area Aruba
Item Population, total
Year 1962
Value 56225
.......
.....使用这些数据,我们使用unstack(),它帮助“数据透视一个级别(必然是分层的)索引标签,返回一个具有新级别列标签的DataFrame,其内部最高级的列标签由旋转索引标签组成”因此,这将索引的最后一层(默认情况下)转换为我们需要的列。
发布于 2019-09-16 15:20:25
另一种使用枢轴的方法:
df['idx'] = df.name.eq('Country or Area').cumsum()
df.pivot(index='idx', columns='name', values='data')输出:
name Country or Area Item Value Year
idx
1 Aruba Population, total 54211 1960
2 Aruba Population, total 55438 1961
3 Aruba Population, total 56225 1962
4 Aruba Population, total 56695 1963
5 Aruba Population, total 57032 1964https://stackoverflow.com/questions/57959030
复制相似问题