如何过滤列表中的元素并生成频率 table
How to filter elements within a list and generate frequency table
我有一个如下所示的数据框
df = pd.DataFrame({'text': ["Hi how","I am fine","Ila say Hi"],
'tokens':[['Hi','how'],['I','am','fine'],['Ila','say','Hi']],
'labels':[['A','B'],['C','B','A'],['D','B','A']]})
我想做两件事
a) 每个标签的数量
b) 计算每个标签下的标记
我正在尝试类似下面的操作
flattened = []
op = itertools.zip_longest(df['tokens'],df['labels'])
for i in op:
for la in df['labels']:
if la == 'A' :
flattened.append(val)
但这是不正确的,无处可去
我希望我的输出有两个 dataframes/tables 如下所示
我们可以在使用 hstack
展平列 tokens
和 labels
之后使用 value_counts
t = np.hstack(df['tokens'])
l = np.hstack(df['labels'])
每个标签的数量
pd.value_counts(l)
B 3
A 3
D 1
C 1
dtype: int64
计算每个标签下的标记
pd.DataFrame(zip(l, t)).value_counts()
0 1
A Hi 2
fine 1
B am 1
how 1
say 1
C I 1
D Ila 1
dtype: int64
你也可以使用Pandas的explode
方法:
>>> df2 = df[['labels', 'tokens']].apply(pd.Series.explode)
>>> df2.labels.value_counts()
B 3
A 3
D 1
C 1
Name: labels, dtype: int64
>>> df2[['labels', 'tokens']].value_counts()
labels tokens
A Hi 2
fine 1
B am 1
how 1
say 1
C I 1
D Ila 1
dtype: int64
我有一个如下所示的数据框
df = pd.DataFrame({'text': ["Hi how","I am fine","Ila say Hi"],
'tokens':[['Hi','how'],['I','am','fine'],['Ila','say','Hi']],
'labels':[['A','B'],['C','B','A'],['D','B','A']]})
我想做两件事
a) 每个标签的数量
b) 计算每个标签下的标记
我正在尝试类似下面的操作
flattened = []
op = itertools.zip_longest(df['tokens'],df['labels'])
for i in op:
for la in df['labels']:
if la == 'A' :
flattened.append(val)
但这是不正确的,无处可去
我希望我的输出有两个 dataframes/tables 如下所示
我们可以在使用 hstack
tokens
和 labels
之后使用 value_counts
t = np.hstack(df['tokens'])
l = np.hstack(df['labels'])
每个标签的数量
pd.value_counts(l)
B 3
A 3
D 1
C 1
dtype: int64
计算每个标签下的标记
pd.DataFrame(zip(l, t)).value_counts()
0 1
A Hi 2
fine 1
B am 1
how 1
say 1
C I 1
D Ila 1
dtype: int64
你也可以使用Pandas的explode
方法:
>>> df2 = df[['labels', 'tokens']].apply(pd.Series.explode)
>>> df2.labels.value_counts()
B 3
A 3
D 1
C 1
Name: labels, dtype: int64
>>> df2[['labels', 'tokens']].value_counts()
labels tokens
A Hi 2
fine 1
B am 1
how 1
say 1
C I 1
D Ila 1
dtype: int64