回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个数据帧:</p>
<pre><code> | items
--------------
0 | [a]
1 | [a, b]
2 | [d, e, f,f]
3 | [d, f, e]
4 | [c, a, b]
</code></pre>
<p>我想计算列表中每个项目的频率,并构建如下表:</p>
<pre><code> a| b| c| d| e| f
-------------------------
0| 1| 0| 0| 0| 0| 0
1| 1| 1| 0| 0| 0| 0
2| 0| 0| 0| 1| 1| 2
3| 0| 0| 0| 1| 1| 1
4| 1| 1| 1| 0| 0| 0
</code></pre>
<p>我看着<a href="https://stackoverflow.com/questions/53218931/how-to-unnest-explode-a-column-in-a-pandas-dataframe">pandas.explode</a>,但我不认为那是我想要的。你知道吗</p>
<p>我可以在下面这样做。但我觉得也许有更有效的方法。我大约有350万排。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>
import pandas as pd
from collections import Counter,defaultdict
df = pd.DataFrame({'items':[['a'],['a','b'],
['d','e','f','f'],['d','f','e'],
['c','a','b']]})
alist = sum(sum(df.values.tolist(),[]),[]) # flatten the list
unique_list = sorted(set(alist)) # get unique value for column names
unique_list
b = defaultdict(list)
for row in sum(df.values.tolist(),[]):
counts = Counter(row)
for name in unique_list:
if name in counts.keys():
b[name].append(counts[name])
else:
b[name].append(0)
pd.DataFrame(b)
</code></pre>