Python 如何使索引数据框中的每一行只有一个对象

Python 如何使索引数据框中的每一行只有一个对象,python,pandas,dataframe,bigdata,seaborn,Python,Pandas,Dataframe,Bigdata,Seaborn,我想创建一个seaborn长方体图,其中包含4个变量(“吃水量”,“充分加热太贵”,“加热系统不充分”,“建筑结构差”),并且温度在y轴上。问题在于,许多人对每个意见都进行了不止一种选择的调查。我想知道,在维护所有数据的同时,如何将每行中的选项分开。 以下是一些数据: CausesCold 吃水15.0 吃水19.0 充分加热它太贵了0.0 吃水10.0 吃水15.0 吃水20.0 充分加热太贵了,加热。。。5 充分加热太贵了,加热。。。18 供暖系统不足,通风量15.0 供暖系统不足,建筑结构

我想创建一个seaborn长方体图,其中包含4个变量(“吃水量”,“充分加热太贵”,“加热系统不充分”,“建筑结构差”),并且温度在y轴上。问题在于,许多人对每个意见都进行了不止一种选择的调查。我想知道,在维护所有数据的同时,如何将每行中的选项分开。 以下是一些数据:

CausesCold
吃水15.0
吃水19.0
充分加热它太贵了0.0
吃水10.0
吃水15.0
吃水20.0
充分加热太贵了,加热。。。5
充分加热太贵了,加热。。。18
供暖系统不足,通风量15.0
供暖系统不足,建筑结构差15.0
充分加热太贵了,加热。。。21
21.0中的供暖系统
21.0中的供暖系统
充分加热太贵了10.0
吃水0.0
充分加热太贵了,太差了。。。18
供暖系统不足18.0
糟糕的建筑结构,吃水19.0
供暖系统不完善,建筑结构不合理。。。19
供暖系统不足18.0
供暖系统不足17.0
充分加热太贵了,太差了。。。18
充分加热太贵了,加热。。。15
充分加热太贵了,加热。。。15
充分加热太贵了,太差了。。。20
充分加热太贵了17.0
充分加热太贵了17.0
供暖系统不足0.0
充分加热太贵了10.0
充分加热太贵了,加热。。。0
我希望它是这样的:

                          CurrentThermostatTemp
CausesCold                                 
Poor building fabric                   20.0
Poor building fabric                   17.0
Poor building fabric                   20.0
Poor building fabric                   19.0
Poor building fabric                   20.0
Poor building fabric                   17.0
Poor building fabric                   18.0
Poor building fabric                   22.0
Poor building fabric                   25.0
Poor building fabric                   20.0
Poor building fabric                   15.0
Poor building fabric                   19.0
Poor building fabric                   20.0
Poor building fabric                   20.0
Poor building fabric                   20.0
Poor building fabric                   21.0
Poor building fabric                   19.0
Poor building fabric                   20.0
Poor building fabric                   18.0
Poor building fabric                   20.0
Poor building fabric                   17.0
Poor building fabric                   25.0
Poor building fabric                   18.0
Poor building fabric                   20.0
Poor building fabric                   16.0
Poor building fabric                   15.0
Poor building fabric                   21.0
Poor building fabric                   25.0
Poor building fabric                   23.0
Poor building fabric                   30.0
...                                     ...
Draughts                               20.0
Draughts                               20.0
Draughts                               17.0
Draughts                               16.0
Draughts                               25.0
Draughts                               21.0
Draughts                               21.0
Draughts                               18.0
Draughts                               20.0
Draughts                               20.0
Draughts                               18.0

我不清楚你的数据在这里是如何格式化的。恒温器读数是否已在其自己的列中

在任何情况下,您都可能希望使用

差不多

temp = data['CausesCold'].str.split(',', n = 1, expand = True) 
这将创建一个带有两个编号列的新数据框

如果我假设恒温器值已经在一个单独的列中关闭,那么我会将恒温器值合并到这个“temp”数据框中。比如:

temp['thermostat']=df['thermostat']
|********************************|
|0         |1        |thermostat |
|Reason 1. |Reason 2 |Number     |
|Reason 1. |Reason 2 |Number     |
|Reason 1. |null     |Number     |
|********************************|
然后,您的临时df看起来像:

temp['thermostat']=df['thermostat']
|********************************|
|0         |1        |thermostat |
|Reason 1. |Reason 2 |Number     |
|Reason 1. |Reason 2 |Number     |
|Reason 1. |null     |Number     |
|********************************|
您希望0列和1列与其对应的恒温器值堆叠在一起

所以把df分开

df=temp[['0','thermostat']]
df1=temp[['1','thermostat']]
然后附加它们。假设有些人只有一个答案(即“1”列为空),那么请继续处理这个问题

df=df.append(df1.dropna(subset=['1']))
如果您不幸拥有一个原始数据源,其中原因和恒温器代码都在同一个字符串中,我可能会作为第一步对该字符串中的任何数字进行正则表达式提取,并将其定义为一个名为“恒温器”或类似的新列

无论如何,这会让你朝着正确的方向前进。这不一定是到达那里的最有效的方法,但它会让你到达那里