列表列表中的DataFrame

时间:2017-02-19 20:25:06

标签: python list pandas dataframe

我有清单

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的元素是元素出现的频率。例如,从上面,我想得到下表 DataFrame from the list of list

在上面的表中,带有1的列给出了每个列表中的1的数量,而2给出了数量为2.在单元格(1,1)中,通过计算第一个列表中的1的数量来获得数字2是[1,1]。在单元格(2,1)中,数字3是通过计算列表[2,1,1,1]中的数量来获得的,而在单元格(2,2)中,数字2是通过计算两个频率来获得的。在列表[2,1,1,1]中,整个过程重复相同的程序。

我知道要计算列表中重复元素的数量,我必须使用count。例如     [1,1,1,2] .Count之间的(1)= 3 我想知道的是使用Pandas,以便我得到如上所述的DataFrame。有可能这样做吗?

2 个答案:

答案 0 :(得分:4)

您可以使用Counter将列表转换为字典。然后使用pd.DataFrame转换该字典

import pandas as pd
from collections import Counter
df = pd.DataFrame([Counter(u_) for u_ in u]).fillna(0)

注意这里没有4,您可以手动将其添加到字典中,或者只是在df[4] = 0

之后添加数据框中的4列

答案 1 :(得分:1)

collections.Counter对此非常有用:

首先从列表中创建Counter个实例,然后使用这些实例来实现DataFrames:

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]]
from collections import Counter
import pandas as pd
df = pd.DataFrame([Counter(e) for e in u]).fillna(0)
df[4] = 0.0
print(df)

输出

   1     2    3    4
0  2   0.0  0.0  0.0
1  3   1.0  0.0  0.0
2  4   4.0  0.0  0.0
3  5  10.0  1.0  0.0
4  6  20.0  6.0  0.0

这是可能的,因为幕后Counter的行为类似于dict