Python 使用新列更新数据帧

Python 使用新列更新数据帧,python,pandas,Python,Pandas,我想创建一个新列,其中包含跨行的所有不同值。行中的每个值都是一个字符串(不是列表) 这是dataframe的外观: +-----------------------------+-------------------------+---------------------------------------------+ | first | second | third

我想创建一个新列,其中包含跨行的所有不同值。行中的每个值都是一个字符串(不是列表)

这是dataframe的外观:

+-----------------------------+-------------------------+---------------------------------------------+
|         first               |            second       |           third                             |  
+-----------------------------+-------------------------+---------------------------------------------+
|['able', 'shovel', 'door']   |['shovel raised']        |['shovel raised', 'raised', 'door', 'shovel']|
|['grade control']            |['grade']                |['grade']                                    |
|['light telling', 'love']    |['would love', 'closed'] |['closed', 'light']                          |
+-----------------------------+-------------------------+---------------------------------------------+
这就是创建具有不同值的新列后dataframe的外观。
df=pd.DataFrame({'first':“['able','spoot','door']”,'second':“['spoot risted']”,'third':“['spoot risted','risted'”,“Distinct_set:“['able','spool','spoot risted','spoot risted']”,index=[0])
尝试以下操作:

df['new_col'] = df.apply(lambda x: list(set(x['first'] + x['second']+x['third'])), axis =1)
它创建了一组单个字符,因为单元格中的数据是字符串

“[‘能’、‘铲’、‘门’”

要更正此用法,请执行以下操作:

df['new_col'] = df.apply(lambda x: list(set(eval(x['first']) + eval(x['second'])+eval(x['third']))), axis =1)

试试这个:

df['new_col'] = df.apply(lambda x: list(set(x['first'] + x['second']+x['third'])), axis =1)
它创建了一组单个字符,因为单元格中的数据是字符串

“[‘能’、‘铲’、‘门’”

要更正此用法,请执行以下操作:

df['new_col'] = df.apply(lambda x: list(set(eval(x['first']) + eval(x['second'])+eval(x['third']))), axis =1)


您可以尝试下面的代码片段

import json
def get_list_from_str(s):
    return json.loads(s.replace("'", '"'))

def flatten_list_rows(row):
    return (set(
        get_list_from_str(row['first']) + 
        get_list_from_str(row['second']) + 
        get_list_from_str(row['third']) 
    ))

df['Distinct_set'] = df.apply(flatten_list_rows, axis=1)

您可以尝试下面的代码片段

import json
def get_list_from_str(s):
    return json.loads(s.replace("'", '"'))

def flatten_list_rows(row):
    return (set(
        get_list_from_str(row['first']) + 
        get_list_from_str(row['second']) + 
        get_list_from_str(row['third']) 
    ))

df['Distinct_set'] = df.apply(flatten_list_rows, axis=1)
这个怎么样:

import pandas as pd
import numpy as np

df = pd.DataFrame([[['able', 'shovel', 'door'], ['shovel raised'], ['shovel raised', 'raised', 'door', 'shovel']], [['grade control'], ['grade'], ['grade']], [['light telling', 'love'], ['would love', 'closed'], ['closed', 'light']]], columns=['first', 'second', 'third'])

df.apply(lambda row: [np.unique(np.hstack(row))], raw=True, axis=1)
最后一个命令生成:

0        [[able, door, raised, shovel, shovel raised]]
1                             [[grade, grade control]]
2    [[closed, light, light telling, love, would lo...
可保存在数据框的新列中:

df['Distinct_set'] = df.apply(lambda row: [np.unique(np.hstack(row))], raw=True, axis=1) 
这个怎么样:

import pandas as pd
import numpy as np

df = pd.DataFrame([[['able', 'shovel', 'door'], ['shovel raised'], ['shovel raised', 'raised', 'door', 'shovel']], [['grade control'], ['grade'], ['grade']], [['light telling', 'love'], ['would love', 'closed'], ['closed', 'light']]], columns=['first', 'second', 'third'])

df.apply(lambda row: [np.unique(np.hstack(row))], raw=True, axis=1)
最后一个命令生成:

0        [[able, door, raised, shovel, shovel raised]]
1                             [[grade, grade control]]
2    [[closed, light, light telling, love, would lo...
可保存在数据框的新列中:

df['Distinct_set'] = df.apply(lambda row: [np.unique(np.hstack(row))], raw=True, axis=1) 

请提供一个可复制的代码来生成数据,以便人们可以直接复制和使用。另外,你能提供更多的细节吗?你能告诉我一些你想要达到的目标吗?您尝试过的代码也有助于这项工作。请提供一个可复制的代码来生成数据,以便人们可以直接复制和使用。另外,你能提供更多的细节吗?你能告诉我一些你想要达到的目标吗?您尝试过的代码也有助于这项工作。它创建了一组字母表和标点符号,而我需要一组用倒逗号表示的单词。@Mohit Sharma,避免使用eval,它们有非常破坏性的输出。检查-它正在创建一组每个字母表和标点符号,而我需要一组用倒逗号表示的单词。@Mohit Sharma,避免使用eval,它们有非常破坏性的输出。选中-未将列表转换为字符串值。再读一遍问题。主要问题示例中的括号有误导性,即它们是否应该是实际字符串的一部分?一旦作者提供了生成数据帧的代码,我将重新评估。他在问题中提到,“行中的每个值都是字符串(不是列表)”,如果您看到预期df中的第一列,您也会知道。好的,您是对的。这意味着方括号是字符串的一部分,这很奇怪……您没有将列表转换为字符串值。再读一遍问题。主要问题示例中的括号有误导性,即它们是否应该是实际字符串的一部分?一旦作者提供了生成数据帧的代码,我将重新评估。他在问题中提到,“行中的每个值都是字符串(不是列表)”,如果您看到预期df中的第一列,您也会知道。好的,您是对的。这意味着方括号是字符串的一部分,这很奇怪。。。