根据值列表将熊猫数据框转换为汇总表

时间:2019-09-07 01:32:44

标签: python python-3.x pandas

我正在尝试从一个数据框创建一个汇总表,如下例所示。这些列具有一组唯一值。

tdf = pd.DataFrame({"A": ["ind1", "ind2", "ind1", "ind3", "ind3", "ind1", "ind1"],
                   "B": ["ind3", "ind1", "ind3", "ind1", "ind1","ind3", "ind2"],
                   "C": ["ind1","ind1","ind2","ind2","ind3","ind3","ind3"],
                   "D": ["ind3","ind1","ind2","ind3","ind2","ind1","ind3"],
                   "E": ["ind1","ind3","ind1","ind1","ind2","ind2","ind2"]})

然后,我需要创建一个新的表状对象,该对象的头与列和3行相对应,并具有设置索引值的频率计数。

setvalues = ['ind1','ind2','ind3']

result = pd.DataFrame({"A": [4,1,2],
                   "B": [3,1,3],
                   "C": [2,2,3],
                   "D": [2,2,3],
                   "E": [3,3,1]})

我尝试了数据透视表,但未返回所需的格式。在Excel中,我可以设置索引值并在列上执行简单的COUNTIF,但是我正在努力用Python实现它。

2 个答案:

答案 0 :(得分:2)

在这里我们可以使用value_counts

tdf.apply(pd.Series.value_counts)
      A  B  C  D  E
ind1  4  3  2  2  3
ind2  1  1  2  2  3
ind3  2  3  3  3  1

答案 1 :(得分:1)

import pandas as pd

tdf = pd.DataFrame({"A": ["ind1", "ind2", "ind1", "ind3", "ind3", "ind1", "ind1"],
                   "B": ["ind3", "ind1", "ind3", "ind1", "ind1","ind3", "ind2"],
                   "C": ["ind1","ind1","ind2","ind2","ind3","ind3","ind3"],
                   "D": ["ind3","ind1","ind2","ind3","ind2","ind1","ind3"],
                   "E": ["ind1","ind3","ind1","ind1","ind2","ind2","ind2"]})

full = tdf.apply(pd.value_counts).fillna(0);
print(full)
相关问题