我有以下数据:
login,a,yex,joe,morgan,1,sanjay,2
我想创建一个数据框,其中每个键(来自上面的对)将是列名,每个值(来自上面的)将是行的索引。数据框中的值将计算键和值之间的每个匹配点。
预期结果应该是:
sentences = [{'mary':'N', 'jane':'N', 'can':'M', 'see':'V','will':'N'},
{'spot':'N','will':'M','see':'V','mary':'N'},
{'will':'M','jane':'N','spot':'V','mary':'N'},
{'mary':'N','will':'M','pat':'V','spot':'N'}]
答案 0 :(得分:3)
在value_counts
中的每列中使用DataFrame.apply
,替换缺失值,转换为整数,最后由DataFrame.T
进行转置:
df = df.apply(pd.value_counts).fillna(0).astype(int).T
print (df)
M N V
mary 0 3 1
jane 0 2 0
can 1 0 0
see 0 0 2
will 3 1 0
spot 0 2 1
pat 0 0 1
或将DataFrame.stack
与SeriesGroupBy.value_counts
和Series.unstack
结合使用:
df = df.stack().groupby(level=1).value_counts().unstack(fill_value=0)
print (df)
M N V
can 1 0 0
jane 0 2 0
mary 0 3 1
pat 0 0 1
see 0 0 2
spot 0 2 1
will 3 1 0
答案 1 :(得分:2)
pd.DataFrame(sentences).T.stack().groupby(level=0).value_counts().unstack().fillna(0)
M N V
can 1.0 0.0 0.0
jane 0.0 2.0 0.0
mary 0.0 3.0 1.0
pat 0.0 0.0 1.0
see 0.0 0.0 2.0
spot 0.0 2.0 1.0
will 3.0 1.0 0.0
根据需要将其转换为整数。
pd.DataFrame(sentences).T.stack().groupby(level=0).value_counts().unstack().fillna(0).cast("int")