我为这个头衔道歉,我知道这不是最有帮助的。我想要做的是重组我的数据,以便给定列中的每个列都有自己的行,其中包含从前一个dataframe转来的某些值。
我当前形式的数据如下所示:
ColA | ColB | ColC | val1 | val2 | val3
1 | 2 | 3 | A | B | C
4 | 5 | 6 | D | E | F我想重组它,这样我就能得到这样的结果:
ColA | ColB | ColC | val
1 | 2 | 3 | A
1 | 2 | 3 | B
1 | 2 | 3 | C
4 | 5 | 6 | D
4 | 5 | 6 | E
4 | 5 | 6 | F 我该怎么做?
我知道我可以浏览每一行,获取相关的数据,并获得一个数据,但我希望有一个更好的选择。
发布于 2022-06-15 16:57:34
给予:
ColA ColB ColC val1 val2 val3
0 1 2 3 A B C
1 4 5 6 D E F做:
df.melt(['ColA', 'ColB', 'ColC'])输出:
ColA ColB ColC variable value
0 1 2 3 val1 A
1 4 5 6 val1 D
2 1 2 3 val2 B
3 4 5 6 val2 E
4 1 2 3 val3 C
5 4 5 6 val3 F发布于 2022-06-15 16:48:26
我认为下面的代码可以解决您的问题。我用您提供的示例数据创建了一个示例。代码涉及数据文件和列的堆叠和合并。
df_start = pd.DataFrame()
df_start = df_start.append([[1, 2, 3, "A", "B", "C"], [4, 5, 6, "D", "E", "F"]])
df_start = df_start.rename(columns={0: "ColA", 1: "ColB", 2: "ColC", 3: "val1", 4: "val2", 5: "val3"})
df_start["vals"] = df_start.values.tolist()
df_start["vals"] = df_start["vals"].apply(lambda x: x[3:])
df_ = df_start["vals"].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('val')
result_df = pd.merge(df_, df_start, left_index=True, right_index=True)
result_df = result_df.iloc[:, [1, 2, 3, 0]]
result_dfhttps://stackoverflow.com/questions/72634739
复制相似问题