Python/Pandas 遍历列
Posted
技术标签:
【中文标题】Python/Pandas 遍历列【英文标题】:Python/Pandas Iterating through columns 【发布时间】:2016-12-08 21:58:27 【问题描述】:我有一个看起来像这样的 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 是不同的对象,但是我怎样才能克服这个问题,或者是否有不同的方法来遍历列? 谢谢!
【问题讨论】:
您能否明确说明您希望输出的内容是什么? 换句话说,您希望每一列是左侧所有列的总和,还是只是该列和左侧(右侧?)的单个列的总和。 我希望每一列都是左边所有列的总和。 @cmf05 - 我认为最好的方法是在问题中添加所需的输出,也许在另一个问题中你可以这样做;) 【参考方案1】:您可以将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
如果需要换档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
【讨论】:
【参考方案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
【讨论】:
啊,谢谢!显然我需要对 pandas 再熟悉一点。 @piRSquared 好吧,OP 有点模棱两可。该代码似乎暗示了窗口为 2 的滚动总和,但所需输出的描述暗示了cumsum
@cmf05 如果您发现自己正在编写 for 循环来处理 pandas
对象,那么几乎总有更好的方法。以上是关于Python/Pandas 遍历列的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas 遍历DataFrame的正确姿势 速度提升一万倍
Python Pandas 遍历DataFrame的正确姿势 速度提升一万倍