我有一个熊猫数据帧,格式如下:
id2_cond1 id2_cond2 id2_cond3 id2_cond4
id2_cond1 1.000000 0.819689 -0.753702 -0.617213
id2_cond2 0.819689 1.000000 -0.554437 -0.295122
id2_cond3 -0.753702 -0.554437 1.000000 0.939336
id2_cond4 -0.617213 -0.295122 0.939336 1.000000
我要做的是将数据帧转换为以下形式:
cond1_cond2 cond1_cond3 cond1_cond4 cond2_cond3 cond2_cond4 cond3_cond4
id2 0.8196886 -0.7537023 -0.6172134 -0.554437 -0.2951216 0.9393364
我可以使用以下脚本正确地执行此操作:
df_tmp = pd.DataFrame(index=[identifier], columns=cols)
counter = 0
for x in range(len(df)):
for y in range(x + 1, len(df)):
df_tmp.ix[0, counter] = df.ix[x, y]
counter += 1
print(df_tmp)
这种方法的问题是,我必须预定义列,并且必须知道顺序。你知道吗
cols = ["cond1_cond2", "cond1_cond3", "cond1_cond4", "cond2_cond3", "cond2_cond4", "cond3_cond4"]
有没有更好的方法来转换这个数据帧,自动创建不同的组合?你知道吗
原始数据帧:
首先,让我们去掉名称(在本例中为“id2”):
然后,让我们得到每个属性的名称。我假设名称还可以包含下划线字符(在本例中不存在),因此我首先根据下划线进行拆分,提取除第一个字符以外的所有元素,然后使用下划线将它们重新连接在一起:
现在,让我们使用列表理解来生成所有名称组合:
我们将使用相同的技术来展平数据:
最后,我们将根据上述信息创建一个系列:
下面是另一个使用
pandas
内置函数stack
的版本。你知道吗通过
df.stack()
将df
转换为Series
输出
接下来删除对角线和下三角部分。你知道吗
接下来,将索引和列合并为一个。你知道吗
将
index
赋值给s
相关问题 更多 >
编程相关推荐