我有列表的列表
u=[[1, 1], [2, 1, 1, 1], [2, 2, 1, 1, 1, 1, 2, 2], [2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2], [2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2]]
我想使用 pandas 创建一个 DataFrame,其中行由 u 的长度索引,列由此列表列表中的数字组给出。
我希望这个DataFrame的元素是元素出现的频率。例如,从上面,我想得到下表
在上表中,带有 1 的列给出了每个列表中的个数,而 2 给出了 2 的个数。在单元格 (1,1) 中,数字 2 是通过计算第一个列表中的个数获得的是 [1,1]。在单元格 (2,1) 中,数字 3 是通过计算列表 [2,1,1,1] 中 1 的数量获得的,而在单元格 (2,2) 中,数字 2 是通过计算两个的频率获得的在列表 [2,1,1,1] 中,始终重复相同的过程。
我知道要计算列表中重复元素的数量,我必须使用计数。例如 [1,1,1,2].count(1)=3 我想知道的是使用 Pandas 来获得上面的 DataFrame。可以这样做吗?
请您参考如下方法:
您可以使用 Counter 将列表转换为字典。然后使用 pd.DataFrame 转换该字典
import pandas as pd
from collections import Counter
df = pd.DataFrame([Counter(u_) for u_ in u]).fillna(0)
注意 这里没有 4,你可以手动将它添加到字典中,或者只在 dataframe 中添加 4 列,即 df[4] = 0
