【发布时间】:2017-09-11 05:53:47
【问题描述】:
我是 python pandas 的新手。我有一个如下数据框:
df = pd.DataFrame({'Name': ['football', 'ramesh','suresh','pankaj','cricket','rakesh','mohit','mahesh'],
'age': ['25', '22','21','32','37','26','24','30']})
print df
Name age
0 football 25
1 ramesh 22
2 suresh 21
3 pankaj 32
4 cricket 37
5 rakesh 26
6 mohit 24
7 mahesh 30
“姓名”栏还包含“运动名称”和“运动人姓名”。我想把它分成两个不同的列,如下所示:
预期输出:
sports_name sport_person_name age
football ramesh 25
suresh 22
pankaj 32
cricket rakesh 26
mohit 24
mahesh 30
如果我在“名称”列上进行分组,我不会得到预期的输出,这显然是直接的输出,因为“名称”列中没有重复。我需要使用什么才能获得预期的输出?
编辑:如果不想硬编码运动名称
df = pd.DataFrame({'Name': ['football', 'ramesh','suresh','pankaj','cricket','rakesh','mohit','mahesh'],
'age': ['', '22','21','32','','26','24','30']})
df = df.replace('', np.nan, regex=True)
nan_rows = df[df.isnull().T.any().T]
sports = nan_rows['Name'].tolist()
df['sports_name'] = df['Name'].where(df['Name'].isin(sports)).ffill()
d = {'Name':'sport_person_name'}
df = df[df['sports_name'] != df['Name']].reset_index(drop=True).rename(columns=d)
df = df[['sports_name','sport_person_name','age']]
print (df)
我刚刚检查了除了“名称”列之外的行在所有其余列中都包含 NAN 值,并且肯定是体育名称。我创建了该运动名称的列表,并利用以下解决方案创建了 sports_name 和 sports_person_name 列。
【问题讨论】: