我的最终目标是制作一个列表,其中包含一对数据框的相应位置,如下所示
[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)
所以我目前迷失了方向。或者我们可以按索引名称和列名访问数据吗?
答案 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