python - GroupBy 和 Transform 不会保留数据框的所有列
问题描述
假设我有以下数据集:
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
推荐阅读
- javascript - Req.Body 正在返回“未定义”值
- python - pyinstaller [7220] 未能执行脚本主模块未找到错误
- android - 在 android 的图像分析用例中,我无法获得比 960 * 720 更高的分辨率
- django - 从视图传递值到表单 - Django
- python - LSTM 输入在非文本分类问题中产生 nans
- excel - 希望在 VBA 中向 xlStockOHLC 烛台图表添加高点和低点工具提示
- android-studio - 在android webview中打开相机
- python - 如何用逗号交换名字和姓氏并添加新列?
- php - 在没有 pw 的情况下连接到 MySQL - 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
- java - spring-boot:run 如何与 maven 一起工作?