0

如果我有一个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

4

1 回答 1

2

IIUC,您可以使用等于“a”的pd.DataFrame.melt参数,id_vars

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
于 2021-01-14T13:12:52.910 回答