Pandas添加一列数字来表示最近月份

7dl7o3gd  于 2023-01-11  发布在  其他
关注(0)|答案(2)|浏览(109)

一个简单的 Dataframe ,我想添加一列数字来指示这个月有多近,最近的一个月有最高的“分数”,最远的有最低的。
下面笨拙的行有助于简单的 Dataframe ,但不能与大的:

import pandas as pd
from io import StringIO

csvfile = StringIO("""
Town,Department,Staff,Month,Project,Score
East,Produce,Ethan,1987-08,A814,27
East,Produce,Ethan,1987-09,A848,27
East,Produce,Ethan,1987-10,A736,29
East,Meat,Harry,1987-07,A813,26""")

df = pd.read_csv(csvfile, sep = ',', engine='python')

def condition(s):
    if (s['Month'] == '1987-10'):
        return 4
    if (s['Month'] == '1987-09'):
        return 3
    if (s['Month'] == '1987-08'):
        return 2
    if (s['Month'] == '1987-07'):
        return 1
    else:
        return ''

df["Month score"] = df.apply(condition, axis=1)

print (df)

对于另一个包含24个月或更长时间的大型 Dataframe ,行中的月份是重复的,那么编写它的好方法是什么?

zed5wv10

zed5wv101#

如果可能,请使用Series.rank

df['score'] = df['Month'].rank(method='dense').astype(int)
print (df)
   Town Department  Staff    Month Project  Score  score
0  East    Produce  Ethan  1987-08    A814     27      2
1  East    Produce  Ethan  1987-09    A848     27      3
2  East    Produce  Ethan  1987-10    A736     29      4
3  East       Meat  Harry  1987-07    A813     26      1
yhxst69z

yhxst69z2#

这似乎工作,不需要一个月的分数

df['Month'] = pd.to_datetime(df['Month'])
df.sort_values('Month', ascending=False )

如果你真的需要一个分数

Score = pd.to_datetime(df['Month'])
df['Score'] = Score
df.sort_values('Score', ascending=False)

相关问题