我有一个包含以下列的数据框:
['NAME','SNAPDATE','RANK']
数据框可以在不同日期包含多次出现的相同NAME,每次都有不同的等级。 我想找到排名提高的产品(意味着价值下降)
我试过了:
diffs = df.RANK.diff()
df = df.assign(
change=np.where(
diffs > 0, 'increase', np.where(
diffs < 0, 'decline', '------')))
问题在于它将数据框作为一个整体来处理,我需要找到一个NAME的趋势。
任何想法。
由于
答案 0 :(得分:1)
我认为您可以将sort_values
与groupby
方法结合使用:
df.sort_values(by=['NAME', 'SNAPDATE']).groupby(by='NAME').RANK.diff()
E.g。
df = pd.DataFrame({
'NAME': ['Name1', 'Name1', 'Name2', 'Name2', 'Name1', 'Name2'],
'SNAPDATE': ['2018-04-01', '2018-04-02', '2018-04-03', '2018-04-01', '2018-04-03', '2018-04-02'],
'RANK': [10, 11, 12, 10, 9 ,8]
})
df.sort_values(by=['NAME', 'SNAPDATE']).groupby(by='NAME').RANK.diff()
输出:
0 NaN
1 1.0
2 1.0
3 NaN
4 -1.0
5 -1.0
Name: RANK, dtype: float64