Python 2.7 python2.7数据框架:从现有列值添加新列
我有一个数据帧,如下所示,只是一个例子Python 2.7 python2.7数据框架:从现有列值添加新列,python-2.7,dataframe,Python 2.7,Dataframe,我有一个数据帧,如下所示,只是一个例子 date y w diff 2010-1-1 3 1 3 2010-1-2 4 1 4 2010-1-3 5 1 2 2010-1-4 6 2 5 2010-1-5 7 2 6 2010-1-6 8 2 5 2010-1-7 9 3 2 2010-1-8 10 4 4 201
date y w diff
2010-1-1 3 1 3
2010-1-2 4 1 4
2010-1-3 5 1 2
2010-1-4 6 2 5
2010-1-5 7 2 6
2010-1-6 8 2 5
2010-1-7 9 3 2
2010-1-8 10 4 4
2010-1-9 11 5 5
2010-1-10 12 6 6
2010-1-11 13 5 6
例如,我是dataframe的索引,我想为dataframe添加新列,有三个新列名,如p1、p2、p3,但值是前两个日期的值。当然,前两行值p1、p2是Nan。从3-5行开始,p1、p2的值都是3、4,p3的值是前两行最后一个差值的值,我的意思是从3-5行开始,p3的值都是4。我用这五行作为句点。我的意思是8-10行,p1,p2,p3的值是8,9,2。新的数据帧如下所示:
date y w diff p1 p2 p3
2010-1-1 3 1 3 Nan Nan Nan
2010-1-2 4 1 4 Nan Nan Nan
2010-1-3 5 1 2 3 4 4
2010-1-4 6 2 5 3 4 4
2010-1-5 7 2 6 3 4 4
2010-1-6 8 2 5 Nan Nan Nan
2010-1-7 9 3 2 Nan Nan Nan
2010-1-8 10 4 4 8 9 2
2010-1-9 11 5 5 8 9 2
2010-1-10 12 6 6 8 9 2
2010-1-11 13 5 6 Nan Nan Nan
如果你不明白我的问题,请评论一下。谢谢 您可以使用由arange
创建的array g
和带有自定义功能的楼层划分,然后根据需要在numpy数组中设置值。最后添加到原始文件的人:
谢谢@jezrael,还有一个问题,你能帮我解决吗。
df['date'] = pd.to_datetime(df['date'])
g = np.arange(len(df.index)) // 5
def f(x):
x = x.shift(2)
a = x.values
if a.shape[0] > 3:
a[3,1] = a[3, 0]
a[3,0] = a[2, 0]
a[2] = a[3]
a[4] = a[3]
return pd.DataFrame(a, index=x.index, columns=['p1','p2','p3'])
df1 = df.groupby(g)['y','w','diff'].apply(f)
print (df1)
p1 p2 p3
0 NaN NaN NaN
1 NaN NaN NaN
2 3.0 4.0 4.0
3 3.0 4.0 4.0
4 3.0 4.0 4.0
5 NaN NaN NaN
6 NaN NaN NaN
7 8.0 9.0 2.0
8 8.0 9.0 2.0
9 8.0 9.0 2.0
10 NaN NaN NaN
df2 = df.join(df1)
print (df2)
date y w diff p1 p2 p3
0 2010-01-01 3 1 3 NaN NaN NaN
1 2010-01-02 4 1 4 NaN NaN NaN
2 2010-01-03 5 1 2 3.0 4.0 4.0
3 2010-01-04 6 2 5 3.0 4.0 4.0
4 2010-01-05 7 2 6 3.0 4.0 4.0
5 2010-01-06 8 2 5 NaN NaN NaN
6 2010-01-07 9 3 2 NaN NaN NaN
7 2010-01-08 10 4 4 8.0 9.0 2.0
8 2010-01-09 11 5 5 8.0 9.0 2.0
9 2010-01-10 12 6 6 8.0 9.0 2.0
10 2010-01-11 13 5 6 NaN NaN NaN