我有一些R使用变异和滞后。我想把这个复制到熊猫身上。这是数据
编辑:包括分组依据和索引的需要
Name Date_x
0 American 2009-10-31
1 American 2009-09-22
2 Zydaco 2009-09-26
3 American 2009-04-17
4 American 2009-02-18
5 American 2009-02-03
6 American 2009-01-16
7 Catalina 2009-09-02
8 Zydaco 2009-08-29
9 Zydaco 2009-08-15
10 Zydaco 2009-06-26
11 Zydaco 2009-10-27
12 Zydaco 2009-10-13
13 Zydaco 2009-04-04
这是R码
^{pr2}$编辑以反映这种方法也失败了 这是我制作的Python代码,它无法复制我试图实现的输出
import pandas as pd
pd.options.mode.chained_assignment = None # default='warn'
test1 = test
test1['Rank'] = test1['Rank'] + 1
test1 = test1.drop('Name', 1)
test2 = pd.merge(test, test1, on='Rank')
这是使用.shift创建输出的尝试。这似乎更有效率。但输出不正确。在
编辑;证明问题
test['Date_y'] = test.groupby(['Name'])['Date_x'].shift(-1)
test.sort(['Name', 'Date_x'], ascending=[1, 0])
Name Date_x Date_y
American 2009-10-31 2009-09-22
American 2009-09-22 2009-04-17
American 2009-04-17 2009-02-18
American 2009-02-18 2009-02-03
American 2009-02-03 2009-01-16
American 2009-01-16 NaN
Catalina 2009-09-02 NaN
Zydaco 2009-10-27 2009-10-13
Zydaco 2009-10-13 2009-04-04
Zydaco 2009-09-26 2009-08-29
Zydaco 2009-08-29 2009-08-15
Zydaco 2009-08-15 2009-06-26
Zydaco 2009-06-26 2009-10-27
Zydaco 2009-04-04 NaN
最好的办法是什么?我想用。如果行得通的话就换班。 或者有更好的方法吗?在
这条线不正确
Zydaco 2009-06-26 2009-10-27
这就再现了错误。在
df = pd.Series (['American','American','Zydaco','American','American','American','American','Catalina',
'Zydaco','Zydaco','Zydaco','Zydaco','Zydaco','Zydaco'])
df = pd.DataFrame(df)
df.columns = ['names']
df['date_x'] = pd.Series(['2009-10-31','2009-09-22','2009-09-26','2009-04-17','2009-02-18',' 2009-02- 03','2009-01-16','2009-09-02','2009-08-29','2009-08-15',' 2009-06-26',' 2009-10-27','2009-10-13','2009- 04-04'])
df['date_y'] = df.groupby(['names'])['date_x'].shift(-1)
mask = df['names'] == "Zydaco"
df = df[mask]
df['date_x'] = pd.to_datetime(df['date_x'])
df.groupby('date_x').apply(lambda d: d.sort()).reset_index('date_x',drop=True)
日期按从最远日期到最近日期的顺序排列。shift似乎不使用日期的顺序,而是使用索引顺序进行移位。在
names date_x date_y
13 Zydaco 2009-04-04 NaN
10 Zydaco 2009-06-26 2009-10-27
9 Zydaco 2009-08-15 2009-06-26
8 Zydaco 2009-08-29 2009-08-15
2 Zydaco 2009-09-26 2009-08-29
12 Zydaco 2009-10-13 2009- 04-04
11 Zydaco 2009-10-27 2009-10-13
您的数据不是从开始排序的,因此它将以这种无序的顺序进行移位。如果要以排序方式移动它,请首先在groupby之前对其进行排序。例如:
我不知道你是怎么得到结果的(一个完全可运行的例子会有帮助),但是如果我运行类似的东西,我会得到:
^{pr2}$这是你想要的吗?或者它有什么问题?在
注意,在本例中不需要groupby,因为在
Name
列中只有一个名称,但我想这是因为您简化了示例。在相关问题 更多 >
编程相关推荐