我很难将熊猫数据框转换为我需要进一步分析的格式。当前数据来自一项调查,我们在调查中要求人们订购首选的沟通方式(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')
这可能是一个非常明显的解决方案,但是很难找到最简单的解决方法。
非常感谢!
答案 0 :(得分:2)
melt
和crosstab
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