有条件地用其他数据框中的值替换熊猫中的列值

多夫

我有两个csv,当作为数据帧读取时,看起来像这样:

df:

   TargetIndex Current1 Current2 Current3
0            0       'D'      'D'      'G'
1            2        0       'E'      'F'
2            0       'A'      'E'      'F'
3            1        0        0        0
4            0       'A'       0       'A'
5            3       'G'       0        0
6            2       'F'      'E'       0
7            4        0        0        0


df2:

    TargetIndex Target1 Target2 Target3
0             1      'A'     'A'     'A'
1             2      'B'     'B'     'B'
2             3      'C'     'C'     'C'
3             4      'A'     'B'     'C'

我想做的是仅0Current列中的值替换列中的值Target但是,仅在TargetIndex值不是的行上0

我当然对Python缺乏经验,通常我会在excel中使用附加列和LOOKUP函数的组合,因此我很费劲。

我到目前为止已经做的是读了一堆线程在这里,并尝试各种用途.loc.isin.replace,和.map在其他的东西,但我发现它很难申请的条件TargetIndex != 0CurrentX == 0

我发现困难的另一件事是首先使用第二个数据帧,我试图使它成为一个.dict有限的成功,以至于我确实知道它是如何工作的,我不能完全应用它。

我确实设法将期望的结果反向工程为以下意大利面条代码:

df['Target1'] = df['TargetIndex'].map(df2.set_index('TargetIndex')['Target1'])
df['Target2'] = df['TargetIndex'].map(df2.set_index('TargetIndex')['Target2'])
df['Target3'] = df['TargetIndex'].map(df2.set_index('TargetIndex')['Target3'])
S1 = df.Current1 == 0
S2 = df.Current2 == 0
S3 = df.Current3 == 0
df.loc[S1, 'Current1'] = df['TargetIndex']
df.loc[S2, 'Current2'] = df['TargetIndex']
df.loc[S3, 'Current3'] = df['TargetIndex']
df.replace({'Current1': { 1 : 'A', 2 : 'B', 3 : 'C', 4 : 'A'}}, inplace=True)
df.replace({'Current2': { 1 : 'A', 2 : 'B', 3 : 'C', 4 : 'B'}}, inplace=True)
df.replace({'Current3': { 1 : 'A', 2 : 'B', 3 : 'C', 4 : 'C'}}, inplace=True)
df.drop(df.columns[[4, 5, 6]], axis=1, inplace=True)

确实确实产生了预期的结果:

df:

   TargetIndex Current1 Current2 Current3
0            0       'D'      'D'      'G'
1            2       'B'      'E'      'F'
2            0       'A'      'E'      'F'
3            1       'A'      'A'      'A'
4            0       'A'       0       'A'
5            3       'G'      'C'      'C'
6            2       'F'      'E'      'B'
7            4       'A'      'B'      'C'

但是,它需要手动输入要替换的内容,而当df2 csv包含5000多个行时,效率不高或不可行。必须有一种更好的方法来执行此操作,而我只是没有看到或正确地理解它,因此我认为我也可以问一下。

耶斯列尔

如果列数相同,则可以使用:

#create index with 
df1 = df1.set_index('TargetIndex')
df2 = df2.set_index('TargetIndex')
#set same columns names for align data
df2.columns = df1.columns

#replace 0 with NaNs and replace NaNs by df2
df = df1.mask(df1 == 0).combine_first(df2)
print (df)
            Current1 Current2 Current3
TargetIndex                           
0                'D'      'D'      'G'
0                'A'      'E'      'F'
0                'A'      NaN      'A'
1                'A'      'A'      'A'
2                'B'      'E'      'F'
2                'F'      'E'      'B'
3                'G'      'C'      'C'
4                'A'      'B'      'C'

如果顺序很重要,请添加reset_index排序:

df1 = df1.reset_index().set_index('TargetIndex')
df2 = df2.set_index('TargetIndex')
df2.columns = df1.columns[1:]

df = (df1.mask(df1 == 0)
        .combine_first(df2)
        .sort_values('index')
        .drop('index', 1)
        .reset_index()
        .fillna(0))
print (df)
   TargetIndex Current1 Current2 Current3
0            0      'D'      'D'      'G'
1            2      'B'      'E'      'F'
2            0      'A'      'E'      'F'
3            1      'A'      'A'      'A'
4            0      'A'        0      'A'
5            3      'G'      'C'      'C'
6            2      'F'      'E'      'B'
7            4      'A'      'B'      'C'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有条件地替换数据框(熊猫)中选定列中的所有值

有条件地替换熊猫数据框中数组列表中的值

有条件地替换熊猫数据框中的值-numpy行为

有条件地替换熊猫数据框中的值

根据熊猫df中其他列的值有条件地填充列

如何根据 julia 中的其他列值有条件地在数据框中创建新列

熊猫:根据其他列的值有条件地替换值

在 Pandas 中有条件地用其他值替换列值

使用R有条件地替换数据框中的列值

有条件地替换熊猫中的缺失值

用D列中的值有条件地替换A,B,C列中的值

R-有条件地用另一个数据框中的值替换值

如何有条件地替换熊猫数据框列中的子字符串?

有条件地替换列中的值

R:有条件地替换数据框中几列中的值

有条件替换pyspark数据框中的值

如何有条件地替换数据框中的 NaN 值?

如何使用if / then语句有条件地替换r数据框中的值

如何有条件地替换数据框中的值?

Python:根据其他两列中的值有条件地创建新列

替换数据框列中的值,直到达到特定的有条件变化的值

使用Tidyverse根据另一个数据框列中的值有条件地替换数据框列中的值

Excel公式-如何使用其他表格中的值有条件地填充列

根据其他行的值有条件地标记数据框中的行

用其他行的值有条件地替换NA

如何在熊猫数据框中有条件地检查和替换日期值?

基于两个数据框中的列进行有条件的值替换

如何有条件地用整数替换空值 Pyspark 数据框

熊猫用同一行中的其他列值替换数据框值