【问题标题】:Move Up columns DataFrame Pandas to where rows match将列 DataFrame Pandas 上移到行匹配的位置
【发布时间】:2022-01-22 20:57:18
【问题描述】:

我真的不知道如何问这个问题,所以如果已经有答案,请不要恨我。

我有一个DataFrame f。它包含气象数据,更具体地说是温度数据。温度数据的列名是:

['tmp_m', 'tmpsfc', 'Maximum_temperature_height_above_ground_Mixed_intervals_Maximum', 'Minimum_temperature_height_above_ground_Mixed_intervals_Minimum']

我有一个“z”列,可以以米为单位指定海拔。如果未指定高程,则此列中的值为 nan。

我还有一个“时间”列,它是一个 DateTime 列。

我遇到的主要问题是 DataFrame 在创建时不是由我创建的,不是由 inner_joining 按时完成的,而是在另一列上完成的,因此我可以在 4 个温度数据列上拥有相同的时间,但是将它们放在不同的行上,因此当一个温度数据列在特定行有一个时间值时,其他温度数据列是 nan,除了最后 2 个温度数据列,因为它们最初是按时加入的,因为它们来自相同的来源。见下图:

我想做并且非常高效的是:

  1. 如果指定了纬度,则通过创建新列从长格式变为宽格式,例如,如果我在 2 米和 80 米处有 tmp_m 变量。我将 tmp_m 列转换为 2 列,一列是 tmp_m_2m,另一列是 tmp_m_80m
  2. “挤压”DataFrame,以便及时“连接”温度数据列

我认为要点 1 可以通过谷歌搜索从长到宽来完成,但我什至不知道用谷歌搜索要点 2 是什么

请帮助所有强大的 SO 神。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    对于 #2,如果我理解正确,您有多个相同的 time 值的行,这样第一、第二或最后 2 个临时列被填充,其余为空值。并且您希望压缩 df 以使您没有相同 time 值的多条记录,并且为每一行填充所有临时列。

    如果是这种情况,以下方法可能有效:

    • 像这样创建三个 df 子集:
      1. 一个只有第一个临时列(4 个临时列中)和所有其他列。
      2. 一个只有第二个临时列和所有其他列。
      3. 一个只有最后 2 个临时列和所有其他列。
    • 对于所有三个 df,删除该 df 中 temp 列为空的行。
    • 准时加入生成的 dfs。

    【讨论】:

    • 是的,您理解正确。我知道我可以做到,但这不是很有效:)
    • 你能解释一下究竟是哪一步效率低吗?
    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2021-07-22
    相关资源
    最近更新 更多