转换熊猫数据框时遇到问题

时间:2018-08-02 00:56:27

标签: python python-3.x pandas dataframe pandas-groupby

我很难将熊猫数据框转换为我需要进一步分析的格式。当前数据来自一项调查,我们在调查中要求人们订购首选的沟通方式(1 =最高,4 =最低)。每行都是受访者。

当前数据框:

    A   B   C   D
0   1   2   4   3
1   2   3   1   4
2   2   1   4   3
3   2   1   4   3
4   1   3   4   2

...

对于数据分析,我想将其转换为以下数据框,其中每一行是一种不同的交流方式,而列则是人们对该位置进行排名的次数的计数。

   1st  2d   3th  4th
A  2    3    0    0
B  2    1    2    0
C  1    0    0    4
D  0    1    3    1

我尝试在原始数据帧上应用定义的函数,我尝试在数据帧上应用.groupby函数或.T,但似乎并没有更接近我想要的结果。

这是我编写的函数,但是我无法弄清楚如何正确应用它来给我想要的结果。

def count_values_rank(column,rank):
    total_count_n1 = 0
    for i in column:
        if i == rank:
            total_count_n1 += 1
    return total_count_n1

在我的数据框的单个列上运行这段代码会获得所需的结果,但是很难实际编写它,因此我可以将其应用于数据框并获得我想要的结果。下面的代码行将返回2。

count_values_rank(df.iloc[:,0],'1')

这可能是一个非常明显的解决方案,但是很难找到最简单的解决方法。

非常感谢!

1 个答案:

答案 0 :(得分:2)

meltcrosstab

pd.crosstab(df.melt().variable,df.melt().value).add_suffix('st')
Out[107]: 
value        1st   2st   3st   4st
variable                        
A            2     3     0     0
B            2     1     2     0
C            1     0     0     4
D            0     1     3     1