Python 3.x 用行的频繁值替换行的所有值
我有这样一个df: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
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]