python - GroupBy 和 Transform 不保留数据框的所有列

标签 python pandas

假设我有以下数据集:

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/

相关文章:

python - 将项目添加到 Django 中的元组元组后是否可以重新启动服务器?

python - 找到 Pandas 数据框中两点之间平均边值最高的路径的有效方法?

python - 永久保存数组中的元素

python - 是否可以通过调试在 IPython 中运行命令?

python - 如何解决 "If using all scalar values, you must pass an index"问题pandas

python - 合并来自 Github 存储库链接的所有 csv 文件,使其成为一个 csv 文件

python - numpy 库的“包含”?

python - Pandas 重复 groupby

python - 如果计数大于 pandas 中的某个值,如何更改 pd.Series 中的 bool 值

python - 如何在 Python 中组合图形? (我得到了多个图表。)