亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無類型下落不明

無類型下落不明

眼眸繁星 2022-10-25 15:05:04
我有以下數據框df:       x_1  x_2      x_3    x_4        x_5  ID  cost 0  159  xyz  883nne2  28h93     lightz  10     2       1  159  xyz  883nne2  28h93     lightz  10     5       2  354  abc  94mmm4k             heavy  15     2       3  354  abc  94mmm4k             heavy  15     1       4  354  abc  94mmm4k   455h             15     7       5  354  abc  94mmm4k             super   3     2       6  354  abc  94mmm4k    53g             10     4   7  354  abc  94mmm4k    53g             10     4 我正在使用以下內容來獲取匯總計數加上成本列的總和:df2 = df.fillna('').groupby(['x_1','x_2','x_3','x_4','x_5','ID'])['cost'].agg(['count','sum'])這將返回我所期望的,即:   x_1  x_2      x_3    x_4        x_5  ID  cost count sum0  159  xyz  883nne2  28h93     lightz  10     2     2   71  354  abc  94mmm4k             heavy  15     2     2   3 2  354  abc  94mmm4k   455h             15     7     1   73  354  abc  94mmm4k             super   3     2     1   24  354  abc  94mmm4k    53g             10     4     2   8然后,我將此數據幀與另一個數據幀合并,以使用以下方法比較聚合計數:y_merge_cols = ['y_1','y_2','y_3','y_4','y_5','ID']x_merge_cols = ['x_1','x_2','x_3','x_4','x_5','ID']d1 = df1.merge(con_subs_df, left_on=y_merge_cols, right_on=x_merge_cols, how='left')我的輸出是:   y_1  y_2      y_3    y_4       y_5  y_id    y_count   count sum0  159  xyz  883nne2  28h93     lightz   10         12      2   71  354  abc  94mmm4k             heavy   15         24                 2  354  abc  94mmm4k   455h              15         72                3  354  abc  94mmm4k             super    3         21                4  354  abc  94mmm4k    53g              10         42                由于某種原因,當我合并列時,完成的計數和總和df2沒有考慮空或 NaN 組合,并且聚合計數和總和不會像合并之前那樣顯示。
查看完整描述

2 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

執行第一個groupby時,您還填寫所有 nan 值df2 = df.fillna('').groupby(...)。因此,在 期間merge,您需要確保兩個數據幀的 nan 值都已替換為''.

問題中的代碼存在一些變量問題(例如,df2來自groupby等于df1con_subs_df合并中),所以我創建了一個自我合并的小示例,輸入數據是df問題中的第一個數據框。

首先groupby(與問題相同):

df2 = df.fillna('').groupby(['x_1','x_2','x_3','x_4','x_5','ID'])['cost'].agg(['count','sum']).reset_index()

在合并中,由于兩個數據框的列相同,我們可以使用on參數來代替left_onand right_on。在這里,我們merge使用之前的df數據框進行操作。

沒有fillna(''):


df1 = df.merge(df2, on=['x_1','x_2','x_3','x_4','x_5','ID'], how='left')


    x_1 x_2     x_3   x_4      x_5  ID  cost    count   sum

0   159 xyz 883nne2 28h93   lightz  10     2      2.0   7.0

1   159 xyz 883nne2 28h93   lightz  10     5      2.0   7.0

2   354 abc 94mmm4k   NaN    heavy  15     2      NaN   NaN

3   354 abc 94mmm4k   NaN    heavy  15     1      NaN   NaN

4   354 abc 94mmm4k  455h      NaN  15     7      NaN   NaN

5   354 abc 94mmm4k   NaN    super  3      2      NaN   NaN

6   354 abc 94mmm4k   53g      NaN  10     4      NaN   NaN

7   354 abc 94mmm4k   53g      NaN  10     4      NaN   NaN

與fillna(''):


df1 = df.fillna('').merge(df2, on=['x_1','x_2','x_3','x_4','x_5','ID'], how='left')

結果:


    x_1 x_2     x_3   x_4      x_5  ID  cost    count   sum

0   159 xyz 883nne2 28h93   lightz  10     2        2     7

1   159 xyz 883nne2 28h93   lightz  10     5        2     7

2   354 abc 94mmm4k          heavy  15     2        2     3

3   354 abc 94mmm4k          heavy  15     1        2     3

4   354 abc 94mmm4k 455h            15     7        1     7

5   354 abc 94mmm4k          super  3      2        1     2

6   354 abc 94mmm4k 53g             10     4        2     8

7   354 abc 94mmm4k 53g             10     4        2     8

實際結果將根據您的確切用例而有所不同,但這表明問題中最有可能出現的問題。


查看完整回答
反對 回復 2022-10-25
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

我高度懷疑您的索引列之一在對象和數字類型之間不匹配。請在合并代碼之前添加此內容以進行檢查。


for i in range(len(y_merge_cols)):

     assert y_merge_cols[i].dtype == x_merge_cols[i].dtype,\

          'Expected type {} got {}'.format(y_merge_cols[i].dtype,x_merge_cols[i].dtype)



查看完整回答
反對 回復 2022-10-25
  • 2 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號