我在Pandas中有一个dataframe,看起来像这样:
df = pandas.DataFrame({
'Age': [21,22,21,23,23,21,21],
'Region': ['North America', 'Europe East', 'Europe West', 'South America',
'North America', 'North America', 'Europe West'],
'Answer': ['yes','yes','no','yes','no','no','yes']})
Age Region Answer
0 21 North America yes
1 22 Europe East yes
2 21 Europe West no
3 23 South America yes
4 23 North America no
5 21 North America no
6 21 Europe West yes
我需要一种方法来生成这样的交叉表或透视表:
Answer no yes
Continent
Europe 1 2
America 2 2
使用Pandas crosstab函数,我设法生成了这个表:
ct = pandas.crosstab(index=df['Region'], columns=df['Answer'])
Answer no yes
Region
Europe East 0 1
Europe West 1 1
North America 2 1
South America 0 1
但是我不知道如何对索引进行分组,因为它们在字符串的某个部分是相同的。
有办法做吗?
4条答案
按热度按时间8wtpewkr1#
您可以使用正则表达式从区域中extract大陆名称。
pdsfdshx2#
您可以创建一个函数来从某个地区获取大陆名称,并使用生成的系列作为数据的索引。它看起来像这样:
z9smfwbn3#
您可以在交叉表之前
.map()
。我想如果你有像“中国”这样的地区,这将更加灵活,在这种情况下,你可以将它Map到“亚洲”,而不必创建一个特殊的字符串匹配规则。p8ekf7hl4#
我尝试使用goupby和pivot表,但由于重复而无法工作。你可以试试这个代码:首先提取Region列的公共部分,然后构建交叉表