【问题标题】:Panda dataframe take column and append as new rows efficiently熊猫数据框有效地获取列并附加为新行
【发布时间】:2021-04-19 11:40:15
【问题描述】:

如果我有 df:

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c'])

并希望获取第二列“b”并附加到“新”df 的末尾,其中包含“a”和“b”列以及包含“b”列名称的名称列,然后是第三列“c”并与“a”一起附加到新df的末尾,名称“c”附加到名称列。 它是时间序列数据,日期时间在“a”中,变量在 b 和 c 中,有时有 20 个变量,有时有 1 或 2 个。

我如何以一种漂亮而有效的方式做到这一点。 现在我正在这样做,但必须为略有不同的 df 做 100 次,但想法相同。

col_nam_list = list(df.columns.values)
df_1 = pd.DataFrame()
df_1["a"] = df["a"]
df_1["name"] = col_nam_list[1]
df_1["value"] = df["b"]

df_2 = pd.DataFrame()
df_2["a"] = df["a"]
df_2["name"] = col_nam_list[2]
df_2["value"] = df["c"]

result = pd.concat([df_1, df_2])

这应该是输出

现在这写起来并不有趣,而且看起来很丑陋和不必要的长。如何改进我的方法?

BR

【问题讨论】:

  • 从您的代码来看,您似乎想要两次a。您是在以后将 df_1 和 df_2 用于其他任何事情,还是只是作为一个时间数据框,您可以稍后将其连接起来形成结果?
  • 是的,我想要一个带有“a”的 2 列 df,然后是 b 和 c。我只有 df_1 和 df_2 最终使结果为 df。
  • 或者实际上有一个 .3 列,名称为“b”和“c”重复 x 次。我会尝试调整我的问题,使其对其他人更有用。
  • 可能这就是你要找的东西:stackoverflow.com/questions/13728208/…
  • 这能回答你的问题吗? Several time series to DataFrame

标签: python pandas


【解决方案1】:

IIUC,你可以使用pd.DataFrame.melt,参数id_vars等于'a',

df.melt('a')

输出:

   a variable  value
0  1        b      2
1  4        b      5
2  7        b      8
3  1        c      3
4  4        c      6
5  7        c      9

【讨论】:

  • 这比我想象的要好得多。太感谢了。一个
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 2021-09-04
  • 2018-01-03
  • 2014-01-03
  • 1970-01-01
  • 2018-02-12
  • 2023-02-25
  • 1970-01-01
相关资源
最近更新 更多