将行的所有值替换为行的频繁值

时间:2019-10-11 18:47:32

标签: 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

问题陈述

基于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然后重新转置数据一起使用。

重点是步骤太多。只是想知道是否也可以按行完成

1 个答案:

答案 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