Python 3.x 用行的频繁值替换行的所有值

Python 3.x 用行的频繁值替换行的所有值,python-3.x,pandas,Python 3.x,Pandas,我有这样一个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

我有这样一个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
问题陈述

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()
基于
参数
列和行
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()
我的代码

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,在df上使用
模式
,然后重新转换数据


关键是步骤太多了。只是想知道它是否也可以按行进行

尝试切片和
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

在您的数据中,数字前是否有实际的美元符号?@Erfan:是的,数字前有符号但表示全部,或仅表示“Pear”@DanielMesejo:对于我想做此练习的所有列,在max中都有一个
$
,但对于极少数列,它们只是数字!!我怎么能不给所有的栏目命名,因为我的栏目太多了@拉胡拉加瓦尔:在这种情况下,您可以根据未被替换的列进行筛选。检查我编辑过的答案。效果很好,投票给了答案!!如果我想为2个或更多的人再查询一次。例如,梨和香蕉,解决方案是否会发生显著变化,还是我应该运行这两个times@RahulAgarwal:同样的逻辑,只需将
eq
更改为
isin
,如下:
df.loc[df.Parameters.isin(['Pear',Banana']),cols]=df.loc[df.Parameters.isin(['Pear',Banana',cols].mode(axis=1)[0]