我想要更改一个函数,该函数将指示器列中的单个值填充为填充Nan (0)--堆叠数据格式的值列,以处理指示符的列表,其中的Nan值应设置为零。
import pandas as pd
import numpy as np
df = pd.DataFrame({'ISO3': ['Australia', 'Austria', 'Belgium', 'Canada', 'Australia', 'Austria', 'Belgium', 'Canada'],
'Year': [1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991],
'Indicator' : ['Disaster Fatalities', 'Disaster Fatalities', 'Disaster Fatalities', 'Disaster Fatalities', 'Oil Reserves', 'Oil Reserves', 'Oil Reserves', 'Oil Reserves' ],
'Value' : [np.nan, 5, np.nan, 18, np.nan, np.nan, np.nan, np.nan]
})
df.head(8)给予:
ISO3 Year Indicator Value
0 Australia 1991 Disaster Fatalities NaN
1 Austria 1991 Disaster Fatalities 5.0
2 Belgium 1991 Disaster Fatalities NaN
3 Canada 1991 Disaster Fatalities 18.0
4 Australia 1991 Oil Reserves NaN
5 Austria 1991 Oil Reserves NaN
6 Belgium 1991 Oil Reserves NaN
7 Canada 1991 Oil Reserves NaN函数,将单个指示符的Nan值设置为零:
def zerofillnaindicator (df, Indicators):
mask = (df['Indicator'] == Indicators)
df.loc[mask, 'Value'] = df.loc[mask, 'Value'].fillna(0)
return df用
df2 = zerofillnaindicator (df = df, Indicators = 'Disaster Fatalities')
df2.head(8)按需要给予:
ISO3 Year Indicator Value
0 Australia 1991 Disaster Fatalities 0.0
1 Austria 1991 Disaster Fatalities 5.0
2 Belgium 1991 Disaster Fatalities 0.0
3 Canada 1991 Disaster Fatalities 18.0
4 Australia 1991 Oil Reserves NaN
5 Austria 1991 Oil Reserves NaN
6 Belgium 1991 Oil Reserves NaN
7 Canada 1991 Oil Reserves NaN但是,我如何改变这一点,以获得这样的指标清单:
df2 = zerofillnaindicator (df = df, Indicators = ['Disaster Fatalities', 'Oil Reserves'])
df2.head(8)我尝试用df.isin(Indicators)替换掩码的条件,但这导致了.isin函数上的“不能用多维键进行索引”错误。
def zerofillnaindicator (df, Indicators):
mask = df.isin(Indicators)
df.loc[mask, 'Value'] = df.loc[mask, 'Value'].fillna(0)
return df发布于 2019-05-09 10:17:41
如果需要在同一个函数中处理标量或列表,请使用isinstance将标量转换为一个元素列表:
def zerofillnaindicator (df, Indicators):
vals = [Indicators] if isinstance(Indicators, str) else Indicators
mask = df['Indicator'].isin(vals)
df.loc[mask, 'Value'] = df.loc[mask, 'Value'].fillna(0)
return df
df2 = zerofillnaindicator (df = df, Indicators = 'Disaster Fatalities')
print (df2)
ISO3 Year Indicator Value
0 Australia 1991 Disaster Fatalities 0.0
1 Austria 1991 Disaster Fatalities 5.0
2 Belgium 1991 Disaster Fatalities 0.0
3 Canada 1991 Disaster Fatalities 18.0
4 Australia 1991 Oil Reserves NaN
5 Austria 1991 Oil Reserves NaN
6 Belgium 1991 Oil Reserves NaN
7 Canada 1991 Oil Reserves NaN
df3 = zerofillnaindicator (df = df, Indicators = ['Disaster Fatalities', 'Oil Reserves'])
print (df3)
ISO3 Year Indicator Value
0 Australia 1991 Disaster Fatalities 0.0
1 Austria 1991 Disaster Fatalities 5.0
2 Belgium 1991 Disaster Fatalities 0.0
3 Canada 1991 Disaster Fatalities 18.0
4 Australia 1991 Oil Reserves 0.0
5 Austria 1991 Oil Reserves 0.0
6 Belgium 1991 Oil Reserves 0.0
7 Canada 1991 Oil Reserves 0.0https://stackoverflow.com/questions/56057153
复制相似问题