Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:如何将单元格的第一部分设置为列名,将单元格的第二部分设置为列值_Python_Pandas_Reshape - Fatal编程技术网

python:如何将单元格的第一部分设置为列名,将单元格的第二部分设置为列值

python:如何将单元格的第一部分设置为列名,将单元格的第二部分设置为列值,python,pandas,reshape,Python,Pandas,Reshape,我有一个df,下面是第一行的示例: sample_df.to_dict() {'Disease_and_concern_0': {1: 'skin irritation/allergies/damage+Moderate Concern'}, 'Disease_and_concern_1': {1: 'developmental/endocrine/reproductive effects+Some Concern'}, 'Disease_and_concern_2': {1: 'dama

我有一个
df
,下面是第一行的示例:

sample_df.to_dict()

{'Disease_and_concern_0': {1: 'skin irritation/allergies/damage+Moderate Concern'},
 'Disease_and_concern_1': {1: 'developmental/endocrine/reproductive effects+Some Concern'},
 'Disease_and_concern_2': {1: 'damage to vision+Some Concern'}}

sample_df = pd.DataFrame(sample_df)
对于每一列,我希望将字符串的第一部分放在+之前,并将其作为列名。字符串+后面的第二部分应该是单元格值

我的期望输出:

  skin irritation/allergies/damage developmental/endoctrine/reproductive effects damage to vision
0                 Moderate Concern                                  Some Concern     Some Concern
我认为有一个简单的解决办法,我已经尝试了一段时间,但没有运气。关于如何实现这一点有什么想法吗


谢谢。

直接操作字典

import pandas as pd
from collections import defaultdict

data = {
    "Disease_and_concern_0": {1: "skin irritation/allergies/damage+Moderate Concern"},
    "Disease_and_concern_1": {
        1: "developmental/endocrine/reproductive effects+Some Concern"
    },
    "Disease_and_concern_2": {1: "damage to vision+Some Concern"},
}

result = defaultdict(dict)
for key, value in data.items():
    for idx, d in value.items():
        col, v = d.split('+')
        result[idx][col] = v
df = pd.DataFrame.from_dict(result, orient='index')

IIUC,您可以尝试
str.split

df = sample_df.apply(lambda s: s.str.split('+').str[1])
df.columns = sample_df.iloc[0].str.split('+').str[0].tolist()
或者,您可以
堆叠
数据帧,然后
围绕分隔符拆分
+,并使用
取消堆叠
重新形状:

s = sample_df.stack().str.split('+')
df = s.str[1].droplevel(1).to_frame().set_index(s.str[0], append=True)[0].unstack()
结果:

  skin irritation/allergies/damage developmental/endocrine/reproductive effects damage to vision
1                 Moderate Concern                                 Some Concern     Some Concern