Python Pandas-在for循环中填充空列

Python Pandas-在for循环中填充空列,python,pandas,Python,Pandas,我有一个df_temp,我想在其中创建空列并将它们填充到for循环中。这就是我所拥有的: df_temp['Rendimento'] = .0 df_temp['Local']='' for row in df_temp.iterrows(): (index, row_contents) = row if row_contents['Jogos_Casa'] > row_contents['Jogos_Fora']: row_contents['Rendi

我有一个
df_temp
,我想在其中创建空列并将它们填充到for循环中。这就是我所拥有的:

df_temp['Rendimento'] = .0
df_temp['Local']=''

for row in df_temp.iterrows():
    (index, row_contents) = row
    if row_contents['Jogos_Casa'] > row_contents['Jogos_Fora']:
        row_contents['Rendimento'] = (row_contents['Media_Fora']*100)/row_contents['Media_Casa']
        row_contents['Local'] = 'Casa'
    elif row_contents['Jogos_Fora'] > row_contents['Jogos_Casa']:
        row_contents['Rendimento'] = (row_contents['Media_Casa']*100)/row_contents['Media_Fora']
        row_contents['Local'] = 'Fora'
    print (row_contents)
当我打印(行内容)时,我得到:

Atleta           Salah
Time             Liverpool
Posicao            ATA
Media_Casa        3.32
Jogos_Casa          13
Media_Fora        3.51
Jogos_Fora          16
Jogos_Total         29
Media_Diff       -0.19
Rendimento     94.5869
Local             Fora
但是当我打印
df_temp
时,新创建的
'Rendimento'
'Local'
列是空的


我缺少什么?

尝试使用apply方法-

def my_func(record):
    if record['Jogos_Casa'] > record['Jogos_Fora']:
        record['Rendimento'] = (record['Media_Fora']*100)/record['Media_Casa']
        record['Local'] = 'Casa'
    elif record['Jogos_Fora'] > record['Jogos_Casa']:
        record['Rendimento'] = (record['Media_Casa']*100)/record['Media_Fora']
        record['Local'] = 'Fora'
    return record

tmp_df = tmp_df.apply(my_func, axis=1)

尝试使用apply方法-

def my_func(record):
    if record['Jogos_Casa'] > record['Jogos_Fora']:
        record['Rendimento'] = (record['Media_Fora']*100)/record['Media_Casa']
        record['Local'] = 'Casa'
    elif record['Jogos_Fora'] > record['Jogos_Casa']:
        record['Rendimento'] = (record['Media_Casa']*100)/record['Media_Fora']
        record['Local'] = 'Fora'
    return record

tmp_df = tmp_df.apply(my_func, axis=1)

您可以使用
np。选择

import numpy as np

choices_local = ['Casa','Fora']
choices_Rendim = [(df['Media_Fora']*100)/df['Media_Casa'],(df['Media_Casa']*100)/df['Media_Fora']]
conditions=[df['Jogos_Fora'].lt(df['Jogos_Casa']), df['Jogos_Casa'].lt(df['Jogos_Fora'])]

df['Local']=np.select(conditions, choices_local, default='')
df['Rendimento']=np.select(conditions, choices_Rendim, default='')

这里要考虑的是默认情况,这将是在>行[jjOsSufFa]=行[ jjoSoCasa ] < /C> >,所以当发生这种情况时,你可以把你想要的结果放进去。


示例:

df=pd.DataFrame({'Jogos_Casa':[4,2,3,4,5],'Jogos_Fora':[1,3,5,1,7],'Media_Casa':[1,2,3,4,7],'Media_Fora':[4,3,1,1,1]})
print(df)
choices_local = ['Casa','Fora']
choices_Rendim = [(df['Media_Fora']*100)/df['Media_Casa'],(df['Media_Casa']*100)/df['Media_Fora']]
conditions=[df['Jogos_Fora'].lt(df['Jogos_Casa']), df['Jogos_Casa'].lt(df['Jogos_Fora'])]

df['Local']=np.select(conditions, choices_local, default='')
df['Rendimento']=np.select(conditions, choices_Rendim, default='')
print(df)
输出:

df
   Jogos_Casa  Jogos_Fora  Media_Casa  Media_Fora
0           4           1           1           4
1           2           3           2           3
2           3           5           3           1
3           4           1           4           1
4           5           7           7           1


df(after np.select)
   Jogos_Casa  Jogos_Fora  Media_Casa  Media_Fora Local         Rendimento
0           4           1           1           4  Casa              400.0
1           2           3           2           3  Fora  66.66666666666667
2           3           5           3           1  Fora              300.0
3           4           1           4           1  Casa               25.0
4           5           7           7           1  Fora              700.0

您可以使用
np。选择

import numpy as np

choices_local = ['Casa','Fora']
choices_Rendim = [(df['Media_Fora']*100)/df['Media_Casa'],(df['Media_Casa']*100)/df['Media_Fora']]
conditions=[df['Jogos_Fora'].lt(df['Jogos_Casa']), df['Jogos_Casa'].lt(df['Jogos_Fora'])]

df['Local']=np.select(conditions, choices_local, default='')
df['Rendimento']=np.select(conditions, choices_Rendim, default='')

这里要考虑的是默认情况,这将是在>行[jjOsSufFa]=行[ jjoSoCasa ] < /C> >,所以当发生这种情况时,你可以把你想要的结果放进去。


示例:

df=pd.DataFrame({'Jogos_Casa':[4,2,3,4,5],'Jogos_Fora':[1,3,5,1,7],'Media_Casa':[1,2,3,4,7],'Media_Fora':[4,3,1,1,1]})
print(df)
choices_local = ['Casa','Fora']
choices_Rendim = [(df['Media_Fora']*100)/df['Media_Casa'],(df['Media_Casa']*100)/df['Media_Fora']]
conditions=[df['Jogos_Fora'].lt(df['Jogos_Casa']), df['Jogos_Casa'].lt(df['Jogos_Fora'])]

df['Local']=np.select(conditions, choices_local, default='')
df['Rendimento']=np.select(conditions, choices_Rendim, default='')
print(df)
输出:

df
   Jogos_Casa  Jogos_Fora  Media_Casa  Media_Fora
0           4           1           1           4
1           2           3           2           3
2           3           5           3           1
3           4           1           4           1
4           5           7           7           1


df(after np.select)
   Jogos_Casa  Jogos_Fora  Media_Casa  Media_Fora Local         Rendimento
0           4           1           1           4  Casa              400.0
1           2           3           2           3  Fora  66.66666666666667
2           3           5           3           1  Fora              300.0
3           4           1           4           1  Casa               25.0
4           5           7           7           1  Fora              700.0

从docs
中,您不应该修改正在迭代的内容。这并不能保证在所有情况下都有效。根据数据类型的不同,迭代器返回的是副本而不是视图,对其进行写入不会产生任何效果。
这可能是原因。这不是使用api的方式,使用
.loc
np.where/np.select
这里有太多的答案,说明了如何操作。从文档
中,您不应该修改您正在迭代的内容。这并不能保证在所有情况下都有效。根据数据类型的不同,迭代器返回的是一个副本而不是一个视图,对其进行写入将不会产生任何效果。
这可能是原因。这不是使用api的方式,请使用
.loc
np。其中/np。选择
此处有大量答案显示了如何执行此操作。