我正在尝试melt pd.DataFrame的某些列,同时保留其他列。在这种情况下,我想将melt sinecosine列放入values,然后将它们来自哪一列(即sinecosine)放入名为data_type的新列中,然后保留原始desc列。

如何使用pd.melt来实现此目的而无需手动熔化和连接每个组件?

# Data
a = np.linspace(0,2*np.pi,100)
DF_data = pd.DataFrame([a, np.sin(np.pi*a), np.cos(np.pi*a)], index=["t", "sine", "cosine"], columns=["t_%d"%_ for _ in range(100)]).T
DF_data["desc"] = ["info about this" for _ in DF_data.index]


python - 如何在Python 3中“融化” pandas.DataFrame`对象?-LMLPHP

关于我这样做的方式:

# Melt each part
DF_melt_A = pd.DataFrame([DF_data["t"],
                          DF_data["sine"],
                          pd.Series(DF_data.shape[0]*["sine"], index=DF_data.index, name="data_type"),
                          DF_data["desc"]]).T.reset_index()
DF_melt_A.columns = ["idx","t","values","data_type","desc"]
DF_melt_B = pd.DataFrame([DF_data["t"],
                          DF_data["cosine"],
                          pd.Series(DF_data.shape[0]*["cosine"], index=DF_data.index, name="data_type"),
                          DF_data["desc"]]).T.reset_index()
DF_melt_B.columns = ["idx","t","values","data_type","desc"]

# Merge
pd.concat([DF_melt_A, DF_melt_B], axis=0, ignore_index=True)


python - 如何在Python 3中“融化” pandas.DataFrame`对象?-LMLPHP

如果我执行pd.melt(DF_data,我将彻底崩溃

python - 如何在Python 3中“融化” pandas.DataFrame`对象?-LMLPHP

针对评论:
python - 如何在Python 3中“融化” pandas.DataFrame`对象?-LMLPHP

最佳答案

好的,因此我必须创建一个类似的df,因为我无权访问您的a变量。我将列表的a变量从0更改为99 ...因此t将为0至99

你可以这样做:

a = range(0, 100)
DF_data = pd.DataFrame([a, [np.sin(x)for x in a], [np.cos(x)for x in a]], index=["t", "sine", "cosine"], columns=["t_%d"%_ for _ in range(100)]).T
DF_data["desc"] = ["info about this" for _ in DF_data.index]

df = pd.melt(DF_data, id_vars=['t','desc'])
df.head(5)


这应该返回您想要的。

     t             desc variable     value
0  0.0  info about this     sine  0.000000
1  1.0  info about this     sine  0.841471
2  2.0  info about this     sine  0.909297
3  3.0  info about this     sine  0.141120
4  4.0  info about this     sine -0.756802

关于python - 如何在Python 3中“融化” pandas.DataFrame`对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39841204/

10-12 18:15