基于DataFrame join写列

古基尔

假设我有两个 DataFrame——df1并且df2——都带有列foobar. 该列foo是一个 CRC32 哈希值,例如123456,该列bar是一个默认为 的布尔字段False

在 pyspark 中,比较foo两个 DataFrames的值的有效方法是什么barTrue在它们匹配的情况下将列写入

例如,给定以下两个 DataFrame:

# df1
foo    | bar
-------|------
123456 | False
444555 | False
666777 | False
888999 | False

# df2
foo    | bar
-------|------
938894 | False
129803 | False
666777 | False
888999 | False

我想要一个如下所示的新 DataFrame,True其中有两列的哈希值发生了变化:

# df3
foo    | bar
-------|------
938894 | True <---
129803 | True <---
666777 | False
888999 | False

任何指导将不胜感激。

更新 7/1/2018

在成功使用接受的答案一段时间后,遇到了一种情况使得解决方案不太合适。如果一个连接的 DataFrame 中的多行与连接中foo另一个 DataFrame 中的一行具有相同的值,则会导致该共享值上的行的笛卡尔积增长。

就我而言,我有基于空字符串的 CRC32 哈希值,这导致0了哈希值。我还应该补充说,我确实有一个唯一的字符串来匹配行上的行,在id这里(可能有过于简单的情况),也许这就是要加入的事情

它会产生这样的情况:

# df1
id   |foo    | bar
-----|-------|------
abc  |123456 | False
def  |444555 | False
ghi  |0      | False
jkl  |0      | False

# df2
id   |foo    | bar
-----|-------|------
abc  |123456 | False
def  |999999 | False
ghi  |666777 | False
jkl  |0      | False

使用选定的答案,会得到一个比所需行数更多的 DataFrame

# df3
id   |foo    | bar
-----|-------|------
abc  |123456 | False
def  |999999 | True <---
ghi  |0      | False
jkl  |0      | False
jkl  |0      | False # extra row add through join

我将保持选择的答案,因为这是对最初提出的问题的一个很好的答案。但是,对于如何处理列foo可能匹配的DataFrame 的任何建议,将不胜感激。

另一个更新 7/1/2018,替代答案

我在没有id加入专栏的情况下把问题复杂化了使用它时,transformed基于列的直接比较来连接和写入相对简单fingerprint

df2.alias("df2").join(df1.alias("df1"), df1.id == df2.id, 'left')\
    .select(f.col('df2.foo'), f.when(df1.fingerprint != df2.fingerprint, f.lit(True)).otherwise(f.col('df2.bar')).alias('bar'))\
    .show(truncate=False)
拉梅什·马哈詹

一个化名左连接df2使用df1和使用when功能来检查不匹配的逻辑应该给你你想要的输出

df2.alias("df2").join(df1.alias("df1"), df1.foo == df2.foo, 'left')\
    .select(f.col('df2.foo'), f.when(f.isnull(f.col('df1.foo')), f.lit(True)).otherwise(f.col('df2.bar')).alias('bar'))\
    .show(truncate=False)

这应该给你

+------+-----+
|foo   |bar  |
+------+-----+
|129803|true |
|938894|true |
|888999|false|
|666777|false|
+------+-----+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于DataFrame列的操作

来自分类Dev

基于多个列值的功能的DataFrame排序

来自分类Dev

基于groupby操作的dataframe新列

来自分类Dev

基于第二列的Pandas DataFrame过滤

来自分类Dev

基于列组条件的 DataFrame 样式

来自分类Dev

基于变量设置 Pandas Dataframe 的列值

来自分类Dev

Python:pandas DataFrame基于其他列的新列

来自分类Dev

Spark Dataframe基于动态选择的列提取列

来自分类Dev

Pandas - 基于特定列的值在 DataFrame 中创建单独的列

来自分类Dev

基于过滤器在Pandas DataFrame中创建新列

来自分类Dev

如何访问基于列表的DataFrame中的某些列?

来自分类Dev

Pandas DataFrame基于多个条件的分组添加新的列值

来自分类Dev

Pandas DataFrame,如何基于多行计算新的列元素

来自分类Dev

基于标签/列值的python pandas dataframe转换

来自分类Dev

基于列名称条件的pandas dataframe列值总和

来自分类Dev

基于 Dataframe 中逗号分隔列中的文本分组

来自分类Dev

如何基于基于行的计算向我的Pandas DataFrame追加新列?

来自分类Dev

DataFrame中的新列基于另一个DataFrame中的行和列

来自分类Dev

如何基于另一个 DataFrame 中的列在 Pandas DataFrame 中创建新列?

来自分类Dev

如何基于Pandas中的另一个DataFrame更改DataFrame的某些列中的值

来自分类Dev

基于相对于同一DataFrame的条件的DataFrame列的最大值

来自分类Dev

基于唯一的多列索引的另一个DataFrame的新pandas DataFrame

来自分类Dev

基于列内容的条件SQL JOIN

来自分类Dev

使用awk / join基于列连接条目

来自分类Dev

交叉联接/合并dataframe1以基于dataframe1中的列创建组合的dataframe2

来自分类Dev

交叉连接/合并dataframe1以基于dataframe1中的列创建组合的dataframe2

来自分类Dev

如何基于存储在列中的字符在R Dataframe中创建列?

来自分类Dev

在pandas的Dataframe中插入一些基于新列的值的新列

来自分类Dev

如何基于Spark Scala中的列dtypes返回DataFrame列的子集

Related 相关文章

  1. 1

    基于DataFrame列的操作

  2. 2

    基于多个列值的功能的DataFrame排序

  3. 3

    基于groupby操作的dataframe新列

  4. 4

    基于第二列的Pandas DataFrame过滤

  5. 5

    基于列组条件的 DataFrame 样式

  6. 6

    基于变量设置 Pandas Dataframe 的列值

  7. 7

    Python:pandas DataFrame基于其他列的新列

  8. 8

    Spark Dataframe基于动态选择的列提取列

  9. 9

    Pandas - 基于特定列的值在 DataFrame 中创建单独的列

  10. 10

    基于过滤器在Pandas DataFrame中创建新列

  11. 11

    如何访问基于列表的DataFrame中的某些列?

  12. 12

    Pandas DataFrame基于多个条件的分组添加新的列值

  13. 13

    Pandas DataFrame,如何基于多行计算新的列元素

  14. 14

    基于标签/列值的python pandas dataframe转换

  15. 15

    基于列名称条件的pandas dataframe列值总和

  16. 16

    基于 Dataframe 中逗号分隔列中的文本分组

  17. 17

    如何基于基于行的计算向我的Pandas DataFrame追加新列?

  18. 18

    DataFrame中的新列基于另一个DataFrame中的行和列

  19. 19

    如何基于另一个 DataFrame 中的列在 Pandas DataFrame 中创建新列?

  20. 20

    如何基于Pandas中的另一个DataFrame更改DataFrame的某些列中的值

  21. 21

    基于相对于同一DataFrame的条件的DataFrame列的最大值

  22. 22

    基于唯一的多列索引的另一个DataFrame的新pandas DataFrame

  23. 23

    基于列内容的条件SQL JOIN

  24. 24

    使用awk / join基于列连接条目

  25. 25

    交叉联接/合并dataframe1以基于dataframe1中的列创建组合的dataframe2

  26. 26

    交叉连接/合并dataframe1以基于dataframe1中的列创建组合的dataframe2

  27. 27

    如何基于存储在列中的字符在R Dataframe中创建列?

  28. 28

    在pandas的Dataframe中插入一些基于新列的值的新列

  29. 29

    如何基于Spark Scala中的列dtypes返回DataFrame列的子集

热门标签

归档