[英]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.