gpt4 book ai didi

python - 如何根据Python中的特定名称拆分数据框中的行?

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:22 24 4
gpt4 key购买 nike

enter image description here

我有一个具有以下结构的数据框:

Bronze  Age              0-30   31-60   60+
Country State Region
A X R1 100 200 300
B Y R2 150 220 140
Silver Age 0-30 31-60 60+
Country State Region
A X R1 150 220 167
B Y R2 735 398 239
Gold Age 0-30 31-60 60+
Country State Region
A X R1 232 564 878
B Y R2 112 233 543
Platinum Age 0-30 31-60 60+
Country State Region
A X R1 646 756 323
B Y R2 434 877 978

现在,我想将青铜、白银、黄金和白金等每个类别分成 4 个不同的数据框。

青铜输出的示例是:

Country State   Region  Age   Count     
A X R1 0-30 100
A X R1 31-60 200
A X R1 60+ 300
B Y R2 0-30 150
B Y R2 31-60 220
B Y R2 60+ 140

我是Python新手,不知道如何进行这种行分割。

最佳答案

创建新列来区分年龄,然后使用mask by isinfillna names 通过前向填充方式:

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进行 reshape ,然后使用函数 sort_values 按列 Country 对 DataFrame 进行排序:

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

关于python - 如何根据Python中的特定名称拆分数据框中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com