我有一个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'
列为空。
我想念什么?
答案 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