Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 应用groupby后如何在dataframe中添加列_Python_Pandas - Fatal编程技术网

Python 应用groupby后如何在dataframe中添加列

Python 应用groupby后如何在dataframe中添加列,python,pandas,Python,Pandas,我有这样的数据帧 id Date 546451991 2018-07-31 00:00:00 546451991 2018-08-02 00:00:00 5441440119 2018-08-13 00:00:00 5441440119 2018-08-13 00:00:00 5441440119 2018-08-14 00:00:00 5344265358 2018-07-13 00:00:00

我有这样的数据帧

    id             Date
    546451991   2018-07-31 00:00:00
    546451991   2018-08-02 00:00:00
    5441440119  2018-08-13 00:00:00
    5441440119  2018-08-13 00:00:00
    5441440119  2018-08-14 00:00:00
    5344265358  2018-07-13 00:00:00
    5344265358  2018-07-15 00:00:00
    5441438884  2018-07-19 00:00:00
我想按“ID”分组,然后根据日期排序,然后添加一列,其中包含下一行的日期

例如,我想要这样的输出

 id             Date              Date1
546451991   2018-07-31 00:00:00  2018-08-02 00:00:00
546451991   2018-08-02 00:00:00  NULL
5441440119  2018-08-13 00:00:00  2018-08-14 00:00:00
5441440119  2018-08-14 00:00:00  2018-08-15 00:00:00
5441440119  2018-08-15 00:00:00  NULL
5344265358  2018-07-13 00:00:00  2018-07-15 00:00:00
5344265358  2018-07-15 00:00:00  NULL
5441438884  2018-07-19 00:00:00  NULL
我尝试过,但没有成功
df.groupby('id')['Date'].sort_values()
不工作

df['Date1'] = df.groupby('id')['Date'].apply(lambda x: x.sort_values().shift(-1))
输出:

编辑

从sandeep输入

df['Date1'] = df.groupby('id')['Date'].shift(-1)

这可能就是你想要的,虽然@Naga Kiran的答案是一句话,但我只是一步一步地简化

import pandas as pd
df = pd.DataFrame({"id":[1, 2, 3, 4], "Date":["2018-07-01", "2018-08-01", "2018-09-02", "2018-10-03"]})
newdf = df.sort_values(["Date"], ascending=False)
newdf["Date1"] = newdf["Date"].transform(lambda x:x.shift(-1))
newdf.groupby("id").head(3)
我首先对数据帧进行排序,然后用
shift(-1)
添加Date1,将列值上移一行,然后执行
groupby(“id”)


希望这有帮助

我想你的意思是“下一行”而不是“下一列”?你不清楚你想在df中做什么样的排序,是升序还是降序?你能发布一个预先制作的df吗?我在试着从剪贴板上把它转换成可测试的格式时,我在犹豫了很长一段时间,当时我应该尝试回答这个问题。我尝试了你的代码,但它给了我以下错误类型错误:插入列的索引与框架索引不兼容。我再次检查了代码,它给出了相同的结果。您是否使用id作为索引?否,但我的索引不是按递增顺序排列的。缺少值,例如1,2,4,7,8,9,10请重置索引df。重置索引(drop=True,inplace=True)是@sandepkadapa,我没有想到;-)
import pandas as pd
df = pd.DataFrame({"id":[1, 2, 3, 4], "Date":["2018-07-01", "2018-08-01", "2018-09-02", "2018-10-03"]})
newdf = df.sort_values(["Date"], ascending=False)
newdf["Date1"] = newdf["Date"].transform(lambda x:x.shift(-1))
newdf.groupby("id").head(3)