pandas groupby 和 shift 但在每个块内
pandas groupby and shift but inside each block
我有一个数据框,然后我将其分组:
ID week sale
A 1 1
A 2 4
A 3 10
B 1 7
B 2 2.3
B 3 4.4
我想申请换班以获得前一周的销售,但只是留在同一个 ID 块中。希望是:
ID week sale sale-shift
A 1 1 nan
A 2 4 1
A 3 10 4
B 1 7 nan
B 2 2.3 7
B 3 4.4 2.3
如果我使用 shift:
df['sale-shift']=df['sale'].shift(-1)
它没有考虑 ID 上的 groupby。我想为每个 ID(在我的例子中是客户)执行。
谢谢!
import pandas as pd
from pandas.compat import StringIO
print(pd.__version__)
csvdata = StringIO("""ID,week,sale
A,1,1
A,2,4
A,3,10
B,1,7
B,2,2.3
B,3,4.4""")
df = pd.read_csv(csvdata, sep=",")
df['sale-shift'] = df.groupby('ID')['sale'].shift(-1)
print(df)
我有一个数据框,然后我将其分组:
ID week sale
A 1 1
A 2 4
A 3 10
B 1 7
B 2 2.3
B 3 4.4
我想申请换班以获得前一周的销售,但只是留在同一个 ID 块中。希望是:
ID week sale sale-shift
A 1 1 nan
A 2 4 1
A 3 10 4
B 1 7 nan
B 2 2.3 7
B 3 4.4 2.3
如果我使用 shift:
df['sale-shift']=df['sale'].shift(-1)
它没有考虑 ID 上的 groupby。我想为每个 ID(在我的例子中是客户)执行。
谢谢!
import pandas as pd
from pandas.compat import StringIO
print(pd.__version__)
csvdata = StringIO("""ID,week,sale
A,1,1
A,2,4
A,3,10
B,1,7
B,2,2.3
B,3,4.4""")
df = pd.read_csv(csvdata, sep=",")
df['sale-shift'] = df.groupby('ID')['sale'].shift(-1)
print(df)