我有一个看起来像这样的DataFrame(有很多额外的列)
age1 age2 age3 age 4 \
Id#
1001 5 6 2 8
1002 7 6 1 0
1003 10 9 7 5
1004 9 12 5 9
我正在尝试编写一个循环,将每个列与之前的列相加并将其返回到新的DataFrame。 我已经开始了,简单地说:
New = pd.DataFrame()
New[0] = SFH2.ix[:,0]
for x in SFH2:
ls = [x,x+1]
B = SFH2[ls].sum(axis=1)
New[x] = B
print(New)
我得到的错误是
ls = [x,x+1]
TypeError: Can't convert 'int' object to str implicitly
我知道int和str是不同的对象,但我怎样才能克服这个问题,或者有不同的方法来迭代列? 谢谢!
答案 0 :(得分:2)
print (df.shift(-1,axis=1))
age1 age2 age3 age4
Id#
1001 6.0 2.0 8.0 NaN
1002 6.0 1.0 0.0 NaN
1003 9.0 7.0 5.0 NaN
1004 12.0 5.0 9.0 NaN
print (df.add(df.shift(-1,axis=1), fill_value=0))
age1 age2 age3 age4
Id#
1001 11.0 8.0 10.0 8.0
1002 13.0 7.0 1.0 0.0
1003 19.0 16.0 12.0 5.0
1004 21.0 17.0 14.0 9.0
如果需要转移1
(默认参数,省略):
print (df.shift(axis=1))
age1 age2 age3 age4
Id#
1001 NaN 5.0 6.0 2.0
1002 NaN 7.0 6.0 1.0
1003 NaN 10.0 9.0 7.0
1004 NaN 9.0 12.0 5.0
print (df.add(df.shift(axis=1), fill_value=0))
age1 age2 age3 age4
Id#
1001 5.0 11.0 8.0 10.0
1002 7.0 13.0 7.0 1.0
1003 10.0 19.0 16.0 12.0
1004 9.0 21.0 17.0 14.0
答案 1 :(得分:2)
听起来cumsum
正是您所寻找的:
In [5]: df
Out[5]:
age1 age2 age3 age4
Id#
1001 5 6 2 8
1002 7 6 1 0
1003 10 9 7 5
1004 9 12 5 9
In [6]: df.cumsum(axis=1)
Out[6]:
age1 age2 age3 age4
Id#
1001 5 11 13 21
1002 7 13 14 14
1003 10 19 26 31
1004 9 21 26 35