簡體   English   中英

復制 F# map 加入 python

[英]Replicate F# map join in python

給定下面的 map a 和 map b,預期結果是 Z629B1601431F3398547EA8C 中的 val c。 我試圖在 python 中復制這種行為。

let join (p:Map<'a,'b>) (q:Map<'a,'b>) = 
    Map(Seq.concat [ (Map.toSeq p) ; (Map.toSeq q) ])
example:

let a = Map([1,11;2,21;3,31;])

let b = Map([3,32; 4,41;5,51;6,61;])

let c = join a b
and the result:

val c : Map<int,int> =
  map [(1, 11); (2, 21); (3, 32); (4, 41); (5, 51); (6, 61)]

到目前為止,這是我在 python 中嘗試過的:

df_c = pd.concat([df_a,df_b], join='inner')

其中 df_a 和 df_b 有兩列包含與 F# 代碼中的變量 a 和變量 b 匹配的數據。 最終,我無法復制這種行為。 相反,我在 df_c 中得到了 df_a 和 df_b 中的所有結果。 任何幫助表示贊賞,謝謝。

可能不是大型數據幀的最佳解決方案。

創建數據框

>>> df_a = pd.DataFrame({"col1": [1,2,3], "col2":[11,21,31]})

>>> df_a
   col1  col2
0     1    11
1     2    21
2     3    31

>>> df_b = pd.DataFrame({"col1": [3,4,5,6], "col2":[32,41,51,61]})

>>> df_b
   col1  col2
0     3    32
1     4    41
2     5    51
3     6    61

連接數據

>>> result_dict = dict(df_a.to_dict('split')['data'])

>>> result_dict
{1: 11, 2: 21, 3: 31}

>>> result_dict.update(dict(df_b.to_dict('split')['data']))
>>> result_dict
{1: 11, 2: 21, 3: 32, 4: 41, 5: 51, 6: 61}

創建結果 dataframe

>>> df_result = pd.DataFrame.from_dict(result_dict.items())

>>> df_result
   0   1
0  1  11
1  2  21
2  3  32
3  4  41
4  5  51
5  6  61
>>>

如果需要/需要,您可以重命名列。

>>> df_result.rename(columns={0: "col1", 1: "col2"}, inplace=True)

>>> df_result
   col1  col2
0     1    11
1     2    21
2     3    32
3     4    41
4     5    51
5     6    61

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM