Python 获取唯一值并转换为字符串

Python 获取唯一值并转换为字符串,python,pandas,Python,Pandas,如何为下面的数据帧获取唯一的非空值并将其转换为字符串?例如: import pandas as pd df=pd.DataFrame([{'id': 1, 'language': 'en'}, {'id': 1}, {'id': 1, 'language': 'fr'}, {'id': 1, 'language': 'en'}]) 我想得到: subs 1 'en,fr' 目前我有一些类似于: summary_df = df.groupby(['field1', 'f

如何为下面的数据帧获取唯一的非空值并将其转换为字符串?例如:

import pandas as pd
df=pd.DataFrame([{'id': 1, 'language': 'en'}, {'id': 1}, {'id': 1, 'language': 'fr'}, {'id': 1, 'language': 'en'}])
我想得到:

       subs
1      'en,fr'
目前我有一些类似于:

summary_df = df.groupby(['field1', 'field2']).agg(
    subs                =('language', 'unique'),
).reset_index()
但这似乎有三个问题:

  • 它包括空值
  • 我无法将其保存到sql,因为它返回一个数组(我想我需要一个字符串)
  • 我还要整理一下
以下是我目前正在做的事情。这个方法好吗?糟糕?有什么地方需要改进吗

subs =('burned_in_sub_language', lambda x: str(sorted(x.dropna().unique())))
期望结果

    id  subs
0   1   [en, fr]
期望结果

    id  subs
0   1   [en, fr]
  • 干净整洁

  • 分组并选择

  • 收集唯一的标签并将其转换为字符串

  • 如果需要,请重命名该列

    df.dropna().sort_values('language')\
            .groupby('id')['language']\
            .unique().str.join(',')\
            .reset_index().rename(columns={'language': 'subs'})
    #   id   subs
    #0   1  en,fr
    
  • 干净整洁

  • 分组并选择

  • 收集唯一的标签并将其转换为字符串

  • 如果需要,请重命名该列

    df.dropna().sort_values('language')\
            .groupby('id')['language']\
            .unique().str.join(',')\
            .reset_index().rename(columns={'language': 'subs'})
    #   id   subs
    #0   1  en,fr
    
  • dfg=df.dropna().groupby('id').agg({'language':set})
    dfg=df.dropna().groupby('id')['language'].apply(lambda col:','.join(sorted(set(col))
    @TrentonMcKinney谢谢——我刚才也添加了一个答案——这种方法看起来行吗?用
    str()
    这样,结果就像
    “['en'”['fr']
    。您可以执行
    dfg=df.groupby('id')['language'].apply(lambda col:','.join(col.dropna().unique())
    ,以获得类似
    'en,fr'
    dfg=df.dropna().groupby('id').agg({'language':set})
    dfg=df.dropna().groupby('id')['language']).apply(lambda col:'),'
    @TrentonMcKinney谢谢——我刚才也添加了一个答案——这种方法看起来合适吗?这样使用
    str()
    ,结果会像
    “['en''fr']”
    。您可以执行
    dfg=df.groupby('id')['language'].apply(lambda col:','.join(col.dropna().unique())
    ,以获得类似
    'en,fr'
    的结果。