gpt4 book ai didi

python - Pandas 中的 DataFrame 代数

转载 作者:太空狗 更新时间:2023-10-30 03:02:24 28 4
gpt4 key购买 nike

假设我有两个数据框

df1
df2

我可以加入 df1_keysdf2_keys

我想做的事:

  1. (A-B)
  2. (A-B) U (B-A)

A=df1B=df2

根据我在 documentation 上阅读的内容,pd.mergehow 参数支持以下选项:

how : {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’
left: use only keys from left frame (SQL: left outer join)
right: use only keys from right frame (SQL: right outer join)
outer: use union of keys from both frames (SQL: full outer join)
inner: use intersection of keys from both frames (SQL: inner join)

但它们都没有直接给我们上面的集合操作 1 和 2。

作为引用,下面是SQL的相应引用(来自this thread):

enter image description here

最佳答案

虽然不直接支持这些,但可以通过在尝试连接之前调整索引来实现...

您可以使用 - 运算符设置减号:

In [11]: ind = pd.Index([1, 2, 3])

In [12]: ind2 = pd.Index([3, 4, 5])

In [13]: ind - ind2
Out[13]: Int64Index([1, 2], dtype='int64')

并设置与 | 的联合和与 & 的交集:

In [14]: ind | ind2
Out[14]: Int64Index([1, 2, 3, 4, 5], dtype='int64')

In [15]: ind & ind2
Out[15]: Int64Index([3], dtype='int64')

因此,如果您有一些带有这些索引的 DataFrame,您可以在加入之前重建索引:

In [21]: df = pd.DataFrame(np.random.randn(3), ind, ['a'])  # ind = df.index

In [22]: df2 = pd.DataFrame(np.random.randn(3), ind2, ['b']) # ind2 = df2.index

In [23]: df.reindex(ind & ind2)
Out[23]:
a
3 1.368518

现在您可以建立任何您想要的连接:

In [24]: df.reindex(ind & ind2).join(df2.reindex(ind & ind2))  # equivalent to inner
Out[24]:
a b
3 1.368518 -1.335534

In [25]: df.reindex(ind - ind2).join(df2.reindex(ind - ind2)) # join on A set minus B
Out[25]:
a b
1 1.193652 NaN
2 0.064467 NaN

关于python - Pandas 中的 DataFrame 代数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22055567/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com