繁体   English   中英

更改熊猫数据框中重复项的值

[英]Change values for duplicates in pandas dataframe

给定的数据帧是

var1  var2  var3  var4  var5
  23     1     0     0     0
  23     0     0     0     1
  43     0     0     0     1
  43     0     1     1     0

我需要检查变量var2,var3,var4,var5的值,并更改二进制值,对于var1中重复的行,所有其他变量都具有相同的值。 在决定要更改哪个副本时,将优先级赋予var2。 所以我需要如下所示的最终数据框:

var1  var2  var3  var4  var5
  23     1     0     0     0
  23     1     0     0     0
  43     0     1     1     1
  43     0     1     1     1

有什么建议么? 谢谢

我认为这没有得到很好的解释,因为我的答案被降了2级:)我希望您能原谅我,因为这是我的第一条代码,用于促进我在excel中应用但希望实现流程自动化的一组规则的实施。 。 我会用其他方式解释。 基本上,我有一个tranacitons列表,而var1是一个事务ID。 变量是我针对每笔交易做出的决定。 var2-拒绝,var3-正确; var4-接受; var5-接受并“做其他事情”。 相同的交易必须做出相同的决定。 碰巧,对于某些交易,决策是分开进行的,因此它们有不同的决策。 我的目标是以相同的方式调整相同交易的决策。 关于决策,拒绝(var2)具有优先权。如果一个被拒绝,则另一个也必须被拒绝。 var2的优先级来自此处。 如果var1 = 1; others = 0关于其他变量。 他们可能有一些非出色的人,例如。 var3 = 1; var4 = 1; var5 = 1; 但在这种情况下var2 = 0(始终)。 具有相同ID的交易具有相同的决定,这一点很重要。 希望对您有所帮助。

如果我了解您的逻辑:

import pandas as np
df = pd.DataFrame({'var1': [23, 23, 43, 43],
                   'var2': [1, 0, 0, 0],
                   'var3': [0, 0, 0, 1],
                   'var4': [0, 0, 0, 1],
                   'var5': [0, 1, 1, 0]})
print(df)
df['var2'] = df.groupby(['var1'])['var2'].transform('max')
f = 1 - df['var2']
df['var3'], df['var4'],df['var5'] =[f]*3

print(df)

输出:

var1  var2  var3  var4  var5
  23     1     0     0     0
  23     1     0     0     0
  43     0     1     1     1
  43     0     1     1     1

我想我做到了。 也许时间太长了,但是它可以用:)再次感谢Frenchy提出的“ groupby”建议!

import pandas as pd
import numpy as np

df = pd.DataFrame({'var1': [23, 23, 43, 43, 53],
                   'var2': [1, 0, 0, 0,1],
                   'var3': [0, 0, 0, 1, 0],
                   'var4': [0, 0, 0, 1, 0],
                   'var5': [0, 1, 1, 0, 0]})
print(df)

df['Dup'] = np.where(df['var1'].duplicated(keep=False), 'dup', np.nan)

df['var2'] = np.where(df['Dup']=="dup", df.groupby(['var1'])['var2'].transform('max'), df['var2'])
df['var3'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var3'])
df['var4'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var4'])
df['var5'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var5'])

df['others_dup'] = np.where((df['Dup']=='dup') & (df['var2']==0), 1, np.nan)

df['var3']=np.where(df['others_dup']==1, df.groupby(['var1'])['var3'].transform('max'), df['var3'])
df['var4']=np.where(df['others_dup']==1, df.groupby(['var1'])['var4'].transform('max'), df['var4'])
df['var5']=np.where(df['others_dup']==1, df.groupby(['var1'])['var5'].transform('max'), df['var5'])

print(df)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM