0
创建分箱数据的计数我有一个数据帧,我想要在另一列中根据np.nan在一列中获得0。 这是为了让我得到两个不同的计数基于两个不同的列,这些列在不同的地方有nan。 我使用平均值对整个数据框进行分箱,使用总和来分箱。下面的代码有效,但.loc行使我的真实数据非常慢。使用.loc,缓慢
my_df = pd.DataFrame({"a": np.random.random(100),
"b": np.random.random(100),
"id": np.arange(100)})
my_df['a'][23] = np.nan
my_df['b'][56] = np.nan
my_df['count_type1'] = 1
my_df['count_type2'] = 1
my_df.loc[(my_df.a.isnull()), my_df.count_type1] = 0
my_df.loc[(my_df.b.isnull()), my_df.count_type2] = 0
bins = np.linspace(0, 1, 10)
groups = my_df.groupby(np.digitize(my_df.a, bins))
binned_data_mean = groups.mean()
binned_data_counts = groups.sum()
binned_data_mean['count_type1'] = binned_data_counts['count_type1']
binned_data_mean['count_type2'] = binned_data_counts['count_type2']
有没有更快的方法来实现我想要的?
您的代码产生错误,不应该这是'my_df.loc [(my_df.a.isnull()), 'count_type1'] = 0 my_df .loc [(my_df.b.isnull()),'count_type2'] = 0'?我也得到857us使用这个版本,如果我使用'where'这变成723us – EdChum 2014-09-04 13:51:44
嗯,这很奇怪,它不会给我错误,当我运行它。我会尝试使用while方法来创建自己的代码。当我添加这行代码时,我感到惊讶,因为之前我所有的代码(大约200行,尽管没有多少说明)几乎立即运行,现在大约需要两分钟。 – branches 2014-09-04 14:15:59