让我们假设我拥有以下数据集:
Stock_id Week Stock_value
1 1 2
1 2 4
1 4 7
1 5 1
2 3 8
2 4 6
2 5 5
2 6 3
我想将Stock_value
列的值移动一个位置,以便获得以下信息:
Stock_id Week Stock_value
1 1 NA
1 2 2
1 4 4
1 5 7
2 3 NA
2 4 8
2 5 6
2 6 5
我正在做的是以下事情:
df = pd.read_csv('C:/Users/user/Desktop/test.txt', keep_default_na=True, sep='\t')
df = df.groupby('Store_id', as_index=False)['Waiting_time'].transform(lambda x:x.shift(periods=1))
但是这给了我
Waiting_time
0 NaN
1 2.0
2 4.0
3 7.0
4 NaN
5 8.0
6 6.0
7 5.0
因此,它为我提供了已移位的值,但并不能保留数据帧的所有列。
我还如何保留数据框的所有列以及移动一列的值?
答案 0 :(得分:2)
您可以通过DataFrameGroupBy.shift
简化解决方案,并将其分配回新列:
df['Waiting_time'] = df.groupby('Stock_id')['Stock_value'].shift()
工作方式类似:
df['Waiting_time']=df.groupby('Stock_id')['Stock_value'].transform(lambda x:x.shift(periods=1))
print (df)
Stock_id Week Stock_value Waiting_time
0 1 1 2 NaN
1 1 2 4 2.0
2 1 4 7 4.0
3 1 5 1 7.0
4 2 3 8 NaN
5 2 4 6 8.0
6 2 5 5 6.0
7 2 6 3 5.0
答案 1 :(得分:2)
当您执行df.groupby('Store_id', as_index=False)['Waiting_time']
时,获得的数据帧只有一列“ Waiting_time”,您将无法从中生成其他列。
jezrael在评论中建议,您应该这样做
df['new col'] = df.groupby('Store_id...
将此新列添加到以前存在的DataFrame中。