[英]How do I concatenate columns in two pandas dataframes with different indexes and non-unique keys
[英]Merging two pandas dataframes with two-term index returns non-unique keys
編輯
我寫這篇文章時認為問題出在merge()
或join()
,但問題出在從groupby()
獲得的結果上。 如果你找到了這篇文章,那么你會因為同樣的原因得到同樣的錯誤。 因此,我保持標題不變。
原帖
我有兩個 Pandas 數據框,每個數據框包含三列。 類型是:
A: category
B: uint32
C: uint32
我按前兩列將它們分組並應用一個函數,如下所示:
df1 = df1.groupby(["A", "B"]).apply(my_function, meta={"Res_1":"uint32", "Res_2":"float32", "Res_3":"float32"})
df2 = df2.groupby(["A", "B"]).apply(my_function, meta={"Res_1":"uint32", "Res_2":"float32", "Res_3":"float32"})
生成的兩個數據幀具有三列,以及一個由兩個術語(最初是 A 和 B 列)組成的索引。 它們看起來像這樣:
Res_1 Res_2 Res_3
A B
chrA01 1 0 0.000000 0.000000
5001 0 0.000000 0.000000
35001 2656 0.967225 21.346008
55001 261 1.000000 27.003832
chrC01 1 131 0.411950 8.610687
... ... ... ...
10001 0 0.000000 0.000000
chrA01 30001 1511 1.000000 25.416943
90001 1407 1.000000 25.073915
chrC01 30001 0 0.000000 0.000000
90001 0 0.000000 0.000000
然后我想使用df1
和df2
索引的聯合將它們合並到一個數據幀中,所以我使用how="outer"
選項on=["A", "B"]
。
df = pd.merge(df1, df2, how="outer", on=["A", "B"], validate="one_to_one")
但是,由於我正在執行validate="one_to_one"
,因此出現此錯誤:
pandas.errors.MergeError: Merge keys are not unique in either left or right dataset; not a one-to-one merge
我知道鍵應該是唯一的,因為我已經評估了兩個數據框的生成及其內容。
也許我在做merge()
錯誤? 我的嫌疑人正在指定on=...
選項。 有沒有一種方法可以指定on=index
即使它是具有兩個術語的索引?
在查看索引和唯一索引的建議之后,我發現了問題。 在A
和B
上執行groupby()
時,使用apply()
調用的函數返回一行,其中包含正確的結果和一個完整的NaN
值。 原因尚待確定。
由於奇怪的輸出排序,這兩個輸出在數據幀中不是一個接一個。 因此,我在寫這篇文章時沒有看到第二行NaN
。
生成數據幀后,我現在為每個運行df.dropna(how="all")
並且重復的索引消失了。 我覺得這不是一個干凈的解決方案,因為那些NaN
行一開始就不應該存在,但現在我找到了這個補丁。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.