为distiguish ages
创建新列,然后通过正向填充方法,通过isin
和fillna
names
使用mask
:
df['ages'] = df.iloc[:,0]
ages = ['Bronze','Silver','Gold', 'Platinum']
mask = df.ages.isin(ages)
df['ages'] = df.ages[mask]
df['ages'] = df.ages.fillna(method='ffill')
#print df
#print df.iloc[1,:].fillna(df.iloc[0,:])
df.columns = df.iloc[1,:].fillna(df.iloc[0,:])
df = df.dropna().rename(columns={'Bronze':'Ages'})
print df
1 Country State Region 0-30 31-60 60+ Ages
2 A X R1 100 200 300 Bronze
3 B Y R2 150 220 140 Bronze
6 A X R1 150 220 167 Silver
7 B Y R2 735 398 239 Silver
10 A X R1 232 564 878 Gold
11 B Y R2 112 233 543 Gold
14 A X R1 646 756 323 Platinum
15 B Y R2 434 877 978 Platinum
使用melt
重塑,然后排序数据帧由Country
列与函数sort_values
:
df = pd.melt(df,
id_vars=['Country','State','Region', 'Ages'],
var_name='Age',
value_name='Count')
df = df.sort_values(by=['Country', 'Age'])
print df
Country State Region Ages Age Count
0 A X R1 Bronze 0-30 100
2 A X R1 Silver 0-30 150
4 A X R1 Gold 0-30 232
6 A X R1 Platinum 0-30 646
8 A X R1 Bronze 31-60 200
10 A X R1 Silver 31-60 220
12 A X R1 Gold 31-60 564
14 A X R1 Platinum 31-60 756
16 A X R1 Bronze 60+ 300
18 A X R1 Silver 60+ 167
20 A X R1 Gold 60+ 878
22 A X R1 Platinum 60+ 323
1 B Y R2 Bronze 0-30 150
3 B Y R2 Silver 0-30 735
5 B Y R2 Gold 0-30 112
7 B Y R2 Platinum 0-30 434
9 B Y R2 Bronze 31-60 220
11 B Y R2 Silver 31-60 398
13 B Y R2 Gold 31-60 233
15 B Y R2 Platinum 31-60 877
17 B Y R2 Bronze 60+ 140
19 B Y R2 Silver 60+ 239
21 B Y R2 Gold 60+ 543
23 B Y R2 Platinum 60+ 978
创建字典d
存储DataFrames
并填写:
d = {}
for age in ages:
#print df[df.Ages == age]
d.update({age : df[df.Ages == age].drop('Ages', axis=1).reset_index(drop=True)})
print d['Bronze']
Country State Region Age Count
0 A X R1 0-30 100
1 A X R1 31-60 200
2 A X R1 60+ 300
3 B Y R2 0-30 150
4 B Y R2 31-60 220
5 B Y R2 60+ 140
print d['Silver']
Country State Region Age Count
0 A X R1 0-30 150
1 A X R1 31-60 220
2 A X R1 60+ 167
3 B Y R2 0-30 735
4 B Y R2 31-60 398
5 B Y R2 60+ 239
你能分享大熊猫据帧可执行形式? – roadrunner66
可以请你分享适当的数据帧...我不理解你的df结构 –
请检查上面链接中的df图像。 – marupav