熊猫:我怎么能迭代两个格式完全相同的数据帧呢?

时间:2014-07-12 04:09:23

标签: python pandas

我的最终目标是制作一个列表,其中包含一对数据框的相应位置,如下所示

 [df_one_first_element, df_two_first_element, column_first, index_first]

 :[0.619159, 0.510162, 20140109,0.50], [0.264191,0.269053,20140213,0.50]...

所以我试图迭代两个数据帧,但现在卡住了。 我怎么能迭代两个具有完全相同格式但数据不同的数据帧。

例如,我有两个数据帧; df_one和df_two如下所示:

df_one = 

      20140109  20140213  20140313  20140410  20140508  20140612  20140710  \
0.50  0.619159  0.264191  0.438849  0.465287  0.445819  0.412582  0.397366   
0.55  0.601379  0.303953  0.457524  0.432335  0.415333  0.382093  0.382361  

df_two = 

      20140109  20140213  20140313  20140410  20140508  20140612  20140710  \
0.50  0.510162  0.269053  0.308494  0.300554  0.294360  0.286980  0.280494   
0.55  0.489953  0.258690  0.290044  0.283933  0.278180  0.271426  0.266580    

我希望通过迭代数据框中的整个值来访问数据框的相同位置。

首先我尝试了iterrows()

i = 0
for index, row in df_one.iterrows():
    j= 0
    for item in row:
        print df_two(i,j)
        j= j+1
    i = i+1

但正如您所知,我们无法访问:

df_two(i,j)

所以我目前迷失了方向。或者我们可以按索引名称和列名访问数据吗?

3 个答案:

答案 0 :(得分:3)

下面的代码还可以让您在相同位置找到两个数据帧的值。

for i in range(0, len(df_one.index)):
    for j in range(0, len(df_one.columns)):
        print df_one.values[i,j],df_two.value[i,j],i,j

答案 1 :(得分:2)

您可以使用itertools.izip

for ( idxRow, s1 ), ( _, s2 ) in itertools.izip( df0.iterrows(), df1.iterrows() ) :
    for ( idxCol, v1 ), ( _, v2 ) in itertools.izip( s1.iteritems(), s2.iteritems() ) :
        print ( v1, v2, idxCol, idxRow )

在:

X   Y   Z
a    1.171124    0.853229    1.416635
b    0.971665   -1.727410   -0.055180

输出:

(1.1711241491561419, 1.3715317727366974, 'X', 'a')
(0.85322862359611618, 0.72799908412372294, 'Y', 'a')
(1.4166350896829785, 2.0068549773211006, 'Z', 'a')
(0.9716653056530119, 0.94413346620976102, 'X', 'b')
(-1.727409829928936, 2.9839447205351157, 'Y', 'b')
(-0.055180403519242693, 0.0030448769325464513, 'Z', 'b')

答案 2 :(得分:0)

我通过get_value mehtod

解决了这个问题

http://pandas.pydata.org/pandas-docs/version/0.8.1/indexing.html

这是我的代码 看起来很有效

df_columns = df_one.columns.values
for index, row in df_one.iterrows():
    j= 0
    for item in row:
        print df_two.get_value(index, df_columns[j])
        j= j+1