Pandas 将数据帧列串接为系列索引

Pandas 将数据帧列串接为系列索引,pandas,Pandas,问题 如何从该数据框的“聚类平均值”列创建熊猫系列,但使用每月、每周和每日列中的数据作为系列索引 该系列的所需输出是这样的,所有列的字符串串接+df index作为索引,“Cluster Mean”列作为值: 0_[1.0765, 3, monthly]_[1.0755, 2, weekly]_1 1.0760 1_[1.0592, 6, monthly]_[1.058, 12, weekly]_1 1.0586 2_[1.0461, 3, monthly]_[1.0459, 24, wee

问题

如何从该数据框的
“聚类平均值”
列创建熊猫系列,但使用
每月
每周
每日
列中的数据作为系列索引

该系列的所需输出是这样的,所有列的字符串串接+df index作为索引,“Cluster Mean”列作为值:

0_[1.0765, 3, monthly]_[1.0755, 2, weekly]_1  1.0760
1_[1.0592, 6, monthly]_[1.058, 12, weekly]_1  1.0586
2_[1.0461, 3, monthly]_[1.0459, 24, weekly]_1 1.0460
原始数据帧的屏幕截图

数据(最小、可重复的示例)

您可以使用
apply()
方法和
join()
方法:

idx=df.index.astype(str)+'_'+df.apply(lambda x:'_'.join((str(x['monthly']),str(x['weekly']),str(x['daily']))),1)

val=df['Cluster Mean']
result=pd.Series(index=idx,data=val.values.tolist())
注意:在上述代码中,idx变量存储索引值,val变量存储该索引的值

最后使用
Series()
方法:

idx=df.index.astype(str)+'_'+df.apply(lambda x:'_'.join((str(x['monthly']),str(x['weekly']),str(x['daily']))),1)

val=df['Cluster Mean']
result=pd.Series(index=idx,data=val.values.tolist())
现在,如果您打印
结果
,您将获得所需的输出(系列):

您可以使用
apply()
方法和
join()
方法:

idx=df.index.astype(str)+'_'+df.apply(lambda x:'_'.join((str(x['monthly']),str(x['weekly']),str(x['daily']))),1)

val=df['Cluster Mean']
result=pd.Series(index=idx,data=val.values.tolist())
注意:在上述代码中,idx变量存储索引值,val变量存储该索引的值

最后使用
Series()
方法:

idx=df.index.astype(str)+'_'+df.apply(lambda x:'_'.join((str(x['monthly']),str(x['weekly']),str(x['daily']))),1)

val=df['Cluster Mean']
result=pd.Series(index=idx,data=val.values.tolist())
现在,如果您打印
结果
,您将获得所需的输出(系列):


如果axis为
1
,则可以使用
row.name
直接访问中的行索引

在联接行值之后,可以使用从系列创建新的数据帧

def join_行(行):
cols=[row.name]+row[['monthly'、'weekly'、'daily']]].values.tolist()
返回'.'.join(映射(str,cols))
结果=pd.concat([df.apply(连接行,轴=1),df['聚类平均值'],轴=1)

如果axis为
1
,则可以使用
row.name
直接访问中的行索引

在联接行值之后,可以使用从系列创建新的数据帧

def join_行(行):
cols=[row.name]+row[['monthly'、'weekly'、'daily']]].values.tolist()
返回'.'.join(映射(str,cols))
结果=pd.concat([df.apply(连接行,轴=1),df['聚类平均值'],轴=1)