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。选择此处有大量答案显示了如何执行此操作。