[英]Python/Pandas Iterating through columns
I have a DataFrame which looks like this (with many additional columns) 我有一个看起来像这样的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
I am trying write a loop that sums each column with the previous ones before it and returns it to a new DataFrame. 我正在尝试编写一个循环,将每个列与之前的列相加并将其返回到新的DataFrame。 I have started out, simply, with this:
我已经开始了,简单地说,这个:
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)
and the error I get is 而我得到的错误是
ls = [x,x+1]
TypeError: Can't convert 'int' object to str implicitly
I know that int and str are different objects, but how can I overcome this, or is there a different way to iterate through columns? 我知道int和str是不同的对象,但是我怎样才能克服这个问题,或者有不同的方法来迭代列? Thanks!
谢谢!
You can use add
with shift
ed DataFrame
: 您可以使用
add
有shift
ED DataFrame
:
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
If need shift with 1
(default parameter, omited): 如果需要换班
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
It sounds like cumsum
is what you are looking for: 这听起来像你正在寻找的
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.