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'
的结果。