【发布时间】: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