簡體   English   中英

根據條件更改一些值

[英]Change some values based on condition

你能幫助完成以下任務嗎? 我有一個數據框列,例如:

index df['Q0']
0         1
1         2
2         3
3         5
4         5
5         6
6         7
7         8
8         3
9         2
10        4
11        7

如果 df.loc[0,'Q0']!=df,我想用 df.loc[0:2,'Q0'] 中的值替換 df.loc[3:8,'Q0'] 中的值。 loc[3,'Q0']

結果應如下所示:

index df['Q0']
0         1
1         2
2         3
3         1
4         2
5         3
6         1
7         2
8         3
9         2
10        4
11        7

我嘗試了以下行:

df.loc[3:8,'Q0'].where(~df.loc[0,'Q0']!=df.loc[3,'Q0']),other=df.loc[0:2,'Q0'],inplace=True)

或者

df['Q0'].replace(to_replace=df.loc[3:8,'Q0'], value=df.loc[0:2,'Q0'], inplace=True)

但它不起作用。 我很可能做錯了什么。 有什么建議?

您可以使用循環功能:

from itertools import cycle

c = cycle(df["Q0"][0:3])
if df.Q0[0] != df.Q0[3]: 
  df["Q0"][3:8] = [next(c) for _ in range(5)] 

感謝您的回復。 我嘗試了這些建議,但我有一些問題:

@adnanmuttaleb - 當我在超過 1 列(例如 12x2 或更大)的數據框中應用該函數時,我注意到 df.Q0[8] 中的值沒有改變。 為什么?

@jezrael - 當我適應您的建議時,我收到錯誤消息:

ValueError: cannot copy sequence with size 5 to array axis with dimension 6

當我將范圍更改為 6 時,我得到了錯誤的結果

import pandas as pd
from itertools import cycle

data={'Q0':[1,2,3,5,5,6,7,8,3,2,4,7],
      'Q0_New':[0,0,0,0,0,0,0,0,0,0,0,0]}
df = pd.DataFrame(data)

##### version 1

c = cycle(df["Q0"][0:3])
if df.Q0[0] != df.Q0[3]: 
  df['Q0_New'][3:8] = [next(c) for _ in range(5)] 

##### version 2

d = cycle(df.loc[0:3,'Q0'])
if df.Q0[0] != df.Q0[3]: 
  df.loc[3:8,'Q0_New'] = [next(d) for _ in range(6)] 

為什么我們有不同的行為,需要做出哪些糾正?

再次感謝各位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM