如何在Pandas中嵌套iterrows

时间:2017-06-07 13:16:37

标签: python pandas

我正在尝试从endResult dataframe'issues'列获取数据并将其放入df中的'Sprint'列。当我运行这段代码时,它会返回一个数据帧,该数据帧将“问题”列中的第三个条目插入到df中“Sprint”列的每一行中。

for i, r in endResult.iterrows():
    j = endResult['issues'][i]['key']
for x, y in df.iterrows():
    df['Sprint'][x] = j

我得到了什么:

冲刺
0 SPGC-9445
1 SPGC-9445
2 SPGC-9445

我应该得到什么:

冲刺
0 SPGC-14075
1 SPGC-9456
2 SPGC-9445

条目取自包含json的endResult数据帧。

                                         issues
0  {u'key': u'SPGC-14075', u'fields': {u'status':...
1  {u'key': u'SPGC-9456', u'fields': {u'status': ...
2  {u'key': u'SPGC-9445', u'fields': {u'status': ...

1 个答案:

答案 0 :(得分:0)

因为您要在第一个循环中将所有内容分配给j,所以在每个循环中都会覆盖此值。然后,您将sprint中的每个值分配给j的值,这将是issues中的最后一个值。

修复此问题的一个简单更改是将j更改为列表,并在循环时附加每个值。这也消除了第二个循环,因为你可以从创建的列表中创建一个列:

import pandas as pd

endResult = pd.DataFrame({'issues' : [{'key': 1},{'key': 2},{'key': 3}]})
df = pd.DataFrame()

j = []
for i, r in endResult.iterrows():
    j.append(endResult['issues'][i]['key'])

df['Sprint'] = j