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