繁体   English   中英

循环遍历 Pandas 数据框中的列

[英]Loop through columns in Pandas dataframe

我有一个熊猫数据框,想遍历所有列并执行一些数学函数。 但是,无法获得所需的结果。以下是我的 3 列示例数据框。

mydf=pd.DataFrame({'ID1':[9,3,7,5], 'ID2':[15,10,3,8],'ID3':[20,14,10,2]})

mydf

  ID1   ID2 ID3
0   9   15  20
1   3   10  14
2   7   3   10
3   5   8   2

下面是我需要为所有列做的事情,它完美地工作。 但是,这只是示例玩具数据集,我的实际数据框中有 500 多列,我正在尝试遍历所有列,但没有给出所需的结果。

tmp_df=mydf.copy()

tmp_df['ID1']=np.log(mydf.iloc[:,0]).diff(1)
tmp_df['ID2']=np.log(mydf.iloc[:,1]).diff(1)
tmp_df['ID3']=np.log(mydf.iloc[:,2]).diff(1)
tmp_df

    ID1          ID2             ID3
0   NaN          NaN             NaN
1   -1.098612   -0.405465   -0.356675
2   0.847298    -1.203973   -0.336472
3   -0.336472   0.980829    -1.609438

基本上,我需要使用循环作为上述结果

我有 500 列要做

我试过如下:

for (i,j) in tmp_df.iteritems():
    #tmp_df['j']=np.log(mydf.iloc[:,0]).diff(1)
    j=np.log(mydf.iloc[:,0]).diff(1)
    print('Column:',i)
    print('Values:',j.values)

但是,这个循环给出了列表中的值,也没有按照我的需要迭代所有列。 我认为这可以很容易地完成,但是,我无法让它发挥作用。 感谢有人可以帮助我以有效的方式处理所有 500 列

使用任何循环逻辑的预期结果

ID1           ID2             ID3
0   NaN           NaN             NaN
1   -1.098612   -0.405465   -0.356675
2   0.847298    -1.203973   -0.336472
3   -0.336472   0.980829    -1.609438

一种方法是使用apply ,无需迭代行

In [48]: mydf=pd.DataFrame({'ID1':[9,3,7,5], 'ID2':[15,10,3,8],'ID3':[20,14,10,2]})

In [49]: mydf.apply(lambda x: np.log(x).diff(1), axis='rows')
Out[49]:
        ID1       ID2       ID3
0       NaN       NaN       NaN
1 -1.098612 -0.405465 -0.356675
2  0.847298 -1.203973 -0.336472
3 -0.336472  0.980829 -1.609438

结果是一个数据帧,所以如果你需要将结果保存在一个新的数据帧中,只需像往常一样设置它

In [50]: new_mydf = mydf.apply(lambda x: np.log(x).diff(1), axis='rows')

In [51]: print(new_mydf)
        ID1       ID2       ID3
0       NaN       NaN       NaN
1 -1.098612 -0.405465 -0.356675
2  0.847298 -1.203973 -0.336472
3 -0.336472  0.980829 -1.609438

编辑:在申请回答 OP 评论后添加更多详细信息以重命名列

In [58]: new_mydf = mydf.apply(lambda x: np.log(x).diff(1), axis='rows').rename(lambda c_name: f'new_{c_name}', axis='columns')

In [58]: print(new_mydf)
    new_ID1   new_ID2   new_ID3
0       NaN       NaN       NaN
1 -1.098612 -0.405465 -0.356675
2  0.847298 -1.203973 -0.336472
3 -0.336472  0.980829 -1.609438

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM