熊猫-在for循环中填充空列

时间:2020-07-29 14:57:15

标签: 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['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)

当我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'列为空。

我想念什么?

2 个答案:

答案 0 :(得分:0)

尝试使用套用方法-

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)

答案 1 :(得分:0)

您可以使用np.select

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='')

这里要考虑的是默认情况,即row['Jogos_Fora']== row['Jogos_Casa'],因此您可以在发生这种情况时输入所需的结果。


示例:

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