如何添加新列以显示最后一个值(python)

2024-06-11 16:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编辑了表并添加了更多信息。希望这能更好地回答我的问题

我有一个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)

原始输出

enter image description here

所需输出(粗体):last1、last2、last3、last4、last5等。。。添加

enter image description here

请注意,由于1月1日之前没有可用的数据,因此,最后一个值(last1、last2、last3等)应反映0%,如上述示例所示。你知道吗


Tags: nameadddfalllocjunmarjan