我想让这个 for
循环将结果打印成同一数据框中各自的行。我试过这段代码,但似乎没有用。 它现在给出了一个索引错误,因为它为每次迭代输出了单独的空数据框。
list2=[(('ATM',), ('ROA',)), (('ATM',), ('ROE',)), (('ATM',), ('NIM',)), (('ATM',), ('ROA', 'ROE')), (('ATM',), ('ROA', 'NIM'))]
tm_final = {0: 3, 1: 6, 2: 4, 3: 2, 4: 0}
totalrows=sum(tm_final[i]>0 for i in tm_final)
df=pd.DataFrame(columns=['A','B','C'])
for i in tm_final:
if tm_final[i]>0:
for j in range(totalrows):
df.iloc[j,0]=i
df.iloc[j,1]=str(list2[i])
df.iloc[j,2]=tm_final[i]
print(df)
希望得到的结果。
A B C
0 (('ATM',), ('ROA',)) 3
1 (('ATM',), ('ROE',)) 6
2 (('ATM',), ('NIM',)) 4
3 (('ATM',), ('ROA', 'ROE')) 2
tm_final = {key: value for (key, value) in tm_final.items() if value > 0 }
df=pd.DataFrame(columns=['A','B','C'])
df.A = tm_final.keys()
df.B = list2
df.C = tm_final.values()
df
A B C
0 0 ((ATM,), (ROA,)) 3
1 1 ((ATM,), (ROE,)) 6
2 2 ((ATM,), (NIM,)) 4
3 3 ((ATM,), (ROA, ROE)) 2
找到了一个更好的方法,贴在这里。
list2=[(('ATM',), ('ROA',)), (('ATM',), ('ROE',)), (('ATM',), ('NIM',)), (('ATM',),
('ROA', 'ROE')), (('ATM',), ('ROA', 'NIM'))]
tm_final = {0: 3, 1: 6, 2: 4, 3: 2, 4: 0}
df=pd.DataFrame(columns=['A','B','C'])
for i in tm_final:
if tm_final[i]>0:
df=df.append({'A':i,'B':list2[i],'C':tm_final[i]},ignore_index=True)
print(df)