【问题标题】:How to keep only certain df columns that appear as rows in another df如何仅保留在另一个 df 中显示为行的某些 df 列
【发布时间】:2020-09-16 13:14:00
【问题描述】:

假设我们有两个数据框

df_1

+--------+--------+-------+-------+
| id     | col1   | col2  | col3  |
+--------+--------+-------+-------+
| A      |   10   |   5   |   4   |
| B      |   5    |   3   |   2   |
+--------+--------+-------+-------+

df_2

+----------+--------+---------+
| col_name | col_t  | col_d   |
+----------+--------+---------+
| col1     |   3.3  |   2.2   |
| col3     |   1    |   2     |
+----------+--------+---------+

我想要实现的是连接这两个表,这样只有出现在df_2col_name 下的列才会保留在df_1 中,即所需的表是

+--------+--------+-------+
| id     | col1   | col3  |
+--------+--------+-------+
| A      |   10   |   4   |
| B      |   5    |   2   |
+--------+--------+-------+

但是,如果可能,我只需要通过连接和/或 df 转置或旋转来执行此操作。

我知道上面的内容可以很容易地通过 selecting df_1 列来推断,因为它们出现在 df_2col_name 中,但这不是我在这里寻找的内容

【问题讨论】:

  • 听起来像XY problem。您正在尝试混合数据和元数据。这不会很好地工作。更好地展示您的完整业务案例,以便我们为您提供最佳解决方案,而不是您想象中的最佳解决方案。

标签: python sql pyspark


【解决方案1】:

执行此操作的一种方法是使用 collect_listdf_2.col_name 中的值进行去重和获取,然后在您的 df_1 数据帧中传递此列名列表:

col_list = list(set(df_2.select(collect_list("col_name")).collect()[0][0]))
list_with_id = ['id'] + col_list

df_1[list_with_id].show()

输出:

+---+----+----+
| id|col1|col3|
+---+----+----+
|  A|  10|   4|
|  B|   5|   2|
+---+----+----+

这就是你要找的吗? (假设您想要动态而不是手动选择列)。不过,我在这里没有使用连接或枢轴。

【讨论】:

    猜你喜欢
    • 2023-01-14
    • 2020-04-06
    • 2023-01-09
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2019-04-16
    • 2020-01-25
    相关资源
    最近更新 更多