微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决python pandas:如何将单元格的第一部分作为列名,将单元格的第二部分作为列值

我有一个 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()

或者,您可以 stack 数据框,然后 split 围绕分隔符 + 并使用 unstack 来重塑:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。