【发布时间】:2020-11-20 09:32:07
【问题描述】:
这是我的 pandas df 的形式:
id year CW value
c1 2020 45 5543.3
c2 2020 45 4434
c3 2020 45 3343.4
c4 2020 45 2399.62
c5 2020 45 1233.34
c1 2020 44 5432
c5 2020 44 4423
c4 2020 44 3342.34
c3 2020 44 2322.3
c2 2020 44 1677.5
...
...
...
c2 2019 2 5222.3
c1 2019 2 4444
c4 2019 2 3333
c3 2019 2 2222.62
c5 2019 2 1111.34
c5 2019 1 5959
c3 2019 1 4949
c1 2019 1 3939.34
c4 2019 1 2929.3
c2 2019 1 1919.5
数据框按“年”、“CW”、“值”降序排列。
我想比较 c1、c2、c3、c4 和 c5 的最新一周表现,以每个 CW(日历周)的价值与实际年份的前一周和去年的百分比相比。
如何获取今年前一周和去年c1、c2、c3等的值?
例如对于 c1,我尝试了以下代码,但不知何故我得到了错误。我使用 iloc[0] 因为 df 是降序排序的。并尝试将“cw”从字符串转换为 int,这样我就可以减去 1 以得到前一个“cw”(例如,从 45 到 44)。
first_wow = (df[(df['c1'] == df.iloc[0]['c1']) & (
int(df['cw']) == int(df.iloc[0]['cw']))].cnt.values[0] - df[
(df['c1'] == df.iloc[0]['c1']) & (
int(df['cw']) == int(df.iloc[0]['cw']) - 1)].cnt.values[0]) / df[
(df['c1'] == df.iloc[0]['c1']) & (
int(df['cw']) == int(df.iloc[0]['cw']) - 1)].cnt.values[0]
【问题讨论】:
-
那么基本上如何根据上述条件获取值...如何提取前一周/一年(同一周)的 c1 值?
标签: python pandas numpy dataframe data-analysis