使用另一个datafram替换dataframe中的零值

2024-06-28 10:50:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想替换foll中的一些值。数据帧:

数据帧

Y2000   Y2001   Y2002    Y2003    Y2004    Item    Item Code
34        43      0      0          25     Test      Val

我想将列中的值替换为通过将标量(例如0.5)乘以此dataframe中的所有值而派生的数值:

数据帧

^{pr2}$

因此,在dataframe_中,Y2002列的值应为10*0.5,Y2003列的值应为20*0.5

目前,我正在执行以下操作:

df = dataframe_a[dataframe_a == 0]
df = df * dataframe_b * 0.5

但是,不确定如何用新值更新dataframe_a


Tags: 数据testdataframedfcodevalitem数值
3条回答
import pandas as pd
import numpy as np
randn = np.random.randn
s = Series(randn(5), index=['a', 'b', 'c', 'd', 'e'])
d = {'one' : Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
df
df.replace(1, 12*4)  # replace all values 1 by 12*4
df

Ref about replace():Replace all occurrences of a string in a pandas dataframe (Python)

如果您不知道0值的位置,则为通用的:

new_df = 0.5*df2[df==0]
new_df.fillna(df, inplace=True)
print(new_df)

    0   1  2  3   4     5    6
0  34  43  5  5  25  Test  Val

其中dataframe_adf,而{}是{}

您可以使用布尔掩码,然后调用fillna

In [58]:
fill = df2.select_dtypes(include = [np.number]) * 0.5
df1 = df1[df1!=0].fillna(fill)
df1

Out[58]:
   Y2000  Y2001  Y2002  Y2003  Y2004  Item Item  Code
0     34     43      5     10     25  Test        Val

在这里,df1[df1 !=0]将生成一个与NaN值相同形状的df,如果不满足条件,则可以对此调用fillna,并传递另一个df,该df将替换索引和列对齐的NaN值。在

布尔掩码的结果:

^{pr2}$

相关问题 更多 >