我正在尝试从一个数据框创建一个汇总表,如下例所示。这些列具有一组唯一值。
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实现它。
答案 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)