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