我有这样的df:
Index Parameters A B C D E
1 Apple 1 2 3 4 5
2 Banana 2 4 5 3 5
3 Potato 3 5 3 2 1
4 Tomato 1 1 1 1 1
5 Pear $4 $5 $5 $5 $3
问题陈述:
基于Parameters
列和行Pear
的值,我想获取最频繁的值并替换为所有值
输出df :
Index Parameters A B C D E
1 Apple 1 2 3 4 5
2 Banana 2 4 5 3 5
3 Potato 3 5 3 2 1
4 Tomato 1 1 1 1 1
5 Pear $5 $5 $5 $5 $5
我的代码:
df_transposed = df.set_index("Parameters").T.rename_axis('Fruits').reset_index()
df_transposed["Pear"] = df_transposed.Pear.mode()
df = df_transposed.set_index("Fruits").T.rename_axis('Parameters').reset_index()
我有一个解决方案,可以很好地与转置df并在其上使用mode
然后重新转置数据一起使用。
重点是步骤太多。只是想知道是否也可以按行完成
答案 0 :(得分:1)
尝试切片,然后df.mode
。正如您所说的,要替换的列太多,您可以根据未替换的列来过滤列。
cols = df.columns.drop(['Index', 'Parameters'])
df.loc[df.Parameters.eq('Pear'), cols] = df.loc[df.Parameters.eq('Pear'), cols].mode(axis=1)[0]
Out[77]:
Index Parameters A B C D E
0 1 Apple 1 2 3 4 5
1 2 Banana 2 4 5 3 5
2 3 Potato 3 5 3 2 1
3 4 Tomato 1 1 1 1 1
4 5 Pear $5 $5 $5 $5 $5