我已经编辑了表并添加了更多信息。希望这能更好地回答我的问题
我有一个df,我想添加一个新的列(last1,last2,last3,等等…)来显示它的最后一个值。你知道吗
CR1、CR2、CR3等。。表示人员等级的当前百分位数;last1、last2、last3等表示人员等级的最后百分位数
我认为解释我的问题最简单的方法是:如何创建显示上一列值的新列。 示例:8月1日:Mary,列last1,last2,last3应显示33%,33%,33%。6月1日的CR1,CR2,CR2的值是多少
这是df的代码
data = {'Date':['1-Jan', '1-Jan', '1-Jan', '1-Jan',
'1-Mar', '1-Mar', '1-Mar', '1-Mar',
'1-Jun', '1-Jun', '1-Jun', '1-Jun', '1-Jun',
'1-July', '1-July', '1-July',
'1-Aug', '1-Aug', '1-Aug', '1-Aug', '1-Aug', '1-Aug'],
'Name':['Pete', 'Mary', 'John', 'Frank',
'Mary', 'John', 'Frank', 'Pete',
'Pete', 'John', 'Mary', 'Frank' 'Mary',
'Luke', 'Cindy', 'Joe',
'Luke', 'Joe', 'Jack', 'Tang', 'Mary', 'Tang'],
'ClassRank':[1, 2, 3, 4,
1, 2, 3, 4,
1, 2, 3, 4, 5,
1, 2, 3,
1, 2, 3, 4, 5, 6]}
df = pd.DataFrame(data)
print(df)
df['add'] = (df.groupby(['ClassRank', 'Name']).cumcount() + 1)
df['all'] = (df.groupby('Name')['ClassRank'].cumcount() + 1)
df['1'] = df['add'].loc[df.ClassRank == 1]
df['2'] = df['add'].loc[df.ClassRank == 2]
df['3'] = df['add'].loc[df.ClassRank == 3]
df['4'] = df['add'].loc[df.ClassRank == 4]
df['5'] = df['add'].loc[df.ClassRank == 5]
df['6'] = df['add'].loc[df.ClassRank == 6]
df = df.groupby('Name').apply(lambda x: x.fillna(method='ffill').fillna(0))
df['CR1'] = (df['1'] / df['all']) * 100
df['CR2'] = (df['2'] / df['all']) * 100
df['CR3'] = (df['3'] / df['all']) * 100
df['CR4'] = (df['4'] / df['all']) * 100
df['CR5'] = (df['5'] / df['all']) * 100
df['CR6'] = (df['6'] / df['all']) * 100
df = df.drop(['add', 'all', '1', '2', '3', '4', '5', '6'], axis=1).round(2)
原始输出
所需输出(粗体):last1、last2、last3、last4、last5等。。。添加
请注意,由于1月1日之前没有可用的数据,因此,最后一个值(last1、last2、last3等)应反映0%,如上述示例所示。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐