每隔一行更改一次值 - 熊猫

时间:2021-03-29 22:54:31

标签: python pandas

我的目标是更改熊猫 df 中每隔一行的值。使用下面,我希望更改 Group 中的每一行。 Group 中的每组两行将始终重复。不过,这种情况发生的方式是随机的。就像在,我不会将每第二行更改为特定值。它获取的方法取决于上一行中的值。

具体来说,每组行将包含来自 GR1GR2 的唯一值。我希望将 Group 中的第二个值更改为第一个值不是的任何值。所以使用下面,第一行将是 AB。因此,后续行将是相反的值。

注意:对于 Time 的每个周期,只有两个重复的行。此外,GR1GR2 中的唯一值会因数据集而异,因此我希望对此进行说明。

df = pd.DataFrame({      
    'Time' : [1,1,2,2,3,3,4,4],    
    'GR1' : ['A','A','A','A','A','A','A','A'],
    'GR2' : ['B','B','B','B','B','B','B','B'],
    'Group' : ['A','A','B','B','B','B','A','A'],    
   })

GR1 = df['GR1'].unique()
GR2 = df['GR2'].unique() 

groups = [y for x in [GR1, GR2] for y in x] 

df['Group'] = np.where(df.index % 2, groups[0], groups[1])

df:

   Time GR1 GR2 Group
0     1   A   B     A 
1     1   A   B     A # first row is from GR1 so this row is GR2
2     2   A   B     B 
3     2   A   B     B # first row is from GR2 so this row is GR1
4     3   A   B     B 
5     3   A   B     B # first row is from GR2 so this row is GR1
6     4   A   B     A 
7     4   A   B     A # first row is from GR1 so this row is GR2

出:

   Time GR1 GR2 Group
0     1   A   B     B
1     1   A   B     A
2     2   A   B     B
3     2   A   B     A
4     3   A   B     B
5     3   A   B     A
6     4   A   B     B
7     4   A   B     A

预期输出:

   Time GR1 GR2 Group
0     1   A   B     A
1     1   A   B     B
2     2   A   B     B
3     2   A   B     A
4     3   A   B     B
5     3   A   B     A
6     4   A   B     A
7     4   A   B     B

1 个答案:

答案 0 :(得分:1)

我们的想法是获取最后三列中每一列的第二行,根据您的逻辑进行比较,然后用逻辑结果替换原始数据框。

getopts