2
我有一些信息数据在下面提供,如何修改熊猫数据框,插入新列
df.info() is below,
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6662 entries, 0 to 6661
Data columns (total 2 columns):
value 6662 non-null float64
country 6478 non-null object
dtypes: float64(1), object(1)
memory usage: 156.1+ KB
None
list of the columns,
[u'value' 'country']
the df is below,
value country
0 550.00 USA
1 118.65 CHINA
2 120.82 CHINA
3 86.82 CHINA
4 112.14 CHINA
5 113.59 CHINA
6 114.31 CHINA
7 111.42 CHINA
8 117.21 CHINA
9 111.42 CHINA
--------------------
--------------------
6655 500.00 USA
6656 500.00 USA
6657 390.00 USA
6658 450.00 USA
6659 420.00 USA
6660 420.00 USA
6661 450.00 USA
我需要即添加另一列outlier
,并把1 如果数据是针对各自的异常值国家, 否则,我需要把0.我强调,outlier
将需要计算各自的国家,而不是为所有国家。
我找一些公式计算可能是在帮助离群值,例如,
# keep only the ones that are within +3 to -3 standard
def exclude_the_outliers(df):
df = df[np.abs(df.col - df.col.mean())<=(3*df.col.std())]
return df
def exclude_the_outliers_extra(df):
LOWER_LIMIT = .35
HIGHER_LIMIT = .70
filt_df = df.loc[:, df.columns == 'value']
# Then, computing percentiles.
quant_df = filt_df.quantile([LOWER_LIMIT, HIGHER_LIMIT])
# Next filtering values based on computed percentiles. To do that I use
# an apply by columns and that's it !
filt_df = filt_df.apply(lambda x: x[(x>quant_df.loc[LOWER_LIMIT,x.name]) &
(x < quant_df.loc[HIGHER_LIMIT,x.name])], axis=0)
filt_df = pd.concat([df.loc[:, df.columns != 'value'], filt_df], axis=1)
filt_df.dropna(inplace=True)
return df
我无法正确地使用这些公式用于此目的,但是,作为建议提供。 最后,我需要计算数据中显示的美国和中国的 异常值的百分比。
如何实现这一目标?
注:把outlier
列全零容易在 pasdas,应该是这样的,
df['outlier'] = 0
但是,它仍然找到outlier
与1
用于覆盖 零问题那个国家。
非常感谢您的回答。如何找到每个国家“异常值的百分比”?我将需要作为控制台打印输出。 – Arefe
为您的后续问题增加了一些代码。请记住将问题标记为已回答。 :) – James
完成并感谢所有的一切。 – Arefe