假设我有以下数据集:
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
所以它给了我偏移的值,但它不保留数据框的所有列。
如何在移动一列的值的同时保留数据框的所有列?
最佳答案
您可以通过 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
关于python - GroupBy 和 Transform 不保留数据框的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54981031/