У меня есть список списков, таких как:
test = [['abc', 'bcd', 'dce'], ['abc', 'ab', 'cd'],['cd', be ']]
Я хочу получить частоту каждого уникального значения для каждого подсписка.Например, первый подсписок имеет
abc 1 bcd 1 dce 1 ab 0 ab 0 cd 0 be 0
Я пытаюсь что-то вроде следующего:
def freq(list_):
df = []
for c in list_:
df_= pd.DataFrame.from_dict(Counter(c), orient = "index")
df_.index.name = 'motif'
df_.reset_index(inplace = True)
df.append(df_)
print(df_)
print(df)
df = reduce(lambda left,right: pd.merge(left,right,on=[0],
how='outer'), df).fillna('void')
df = df.T
df.columns = df.iloc[0]
df = df.iloc[1:]
df[df == "void"] = 0
col_names = sorted(df.columns)
df = df[col_names]
vals = df.values
sums = np.sum(vals, axis = 1)
freqs = vals / sums[:,None]
return pd.DataFrame(freqs).T
Но это не работает.
Мой желаемый вывод - это фрейм данных с каждым уникальным значением в качестве элемента столбца и каждым подсписком в виде строки.
Как это можно сделать?
РЕДАКТИРОВАТЬ:
Желаемый выход:
ab abc bcd be cd dce
0 0 .33 .33 0 0 .33
1 .33 .33 0 0 .33 0
2 0 0 0 .5 .5 0