在Pandas中计算每列的唯一符号

Ali*_*n13 4 python unique set dataframe pandas

我想知道如何计算数据帧中单个列中出现的唯一符号的数量.例如:

df = pd.DataFrame({'col1': ['a', 'bbb', 'cc', ''], 'col2': ['ddd', 'eeeee', 'ff', 'ggggggg']})

df  col1    col2
0      a    ddd
1    bbb    eeeee
2     cc    ff
3           gggggg
Run Code Online (Sandbox Code Playgroud)

它应该计算col1包含3个唯一符号,col2包含4个唯一符号.

到目前为止我的代码(但这可能是错误的):

unique_symbols = [0]*203
i = 0
for col in df.columns:
    observed_symbols = []
    df_temp = df[[col]]
    df_temp = df_temp.astype('str')

    #This part is where I am not so sure
    for index, row in df_temp.iterrows():
        pass

    if symbol not in observed_symbols:
        observed_symbols.append(symbol)
    unique_symbols[i] = len(observed_symbols)
    i += 1
Run Code Online (Sandbox Code Playgroud)

提前致谢

sac*_*cuL 5

这是一种方式:

df.apply(lambda x: len(set(''.join(x.astype(str)))))

col1    3
col2    4
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 5

选项1
str.join + set词典理解中
对于像这样的问题,我宁愿回到python,因为它的速度要快得多.

{c : len(set(''.join(df[c]))) for c in df.columns}
Run Code Online (Sandbox Code Playgroud)

{'col1': 3, 'col2': 4}
Run Code Online (Sandbox Code Playgroud)

选项2
agg
如果你想留在熊猫空间.

df.agg(lambda x: set(''.join(x)), axis=0).str.len()
Run Code Online (Sandbox Code Playgroud)

要么,

df.agg(lambda x: len(set(''.join(x))), axis=0)
Run Code Online (Sandbox Code Playgroud)

col1    3
col2    4
dtype: int64
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

也许

df.sum().apply(set).str.len()
Out[673]: 
col1    3
col2    4
dtype: int64
Run Code Online (Sandbox Code Playgroud)