假設我有這個資料集:
id col1 col2
AB1 10 2022-01-05
AB1 20 2022-05-10
CC2 3 2022-03-01
CC2 5 2022-04-01
DD1 100 2022-01-01
如果 col1 大于 5 并且 col2 高于 2022-03-10,我想要一個接收隨機值的新列。
我嘗試使用 np.where,就像這樣:
df['new_column'] = np.where(df['col1'] > 5 & df['col2' > '2022-03-01',
np.random.random(),
np.nan)
但是生成的值都是一樣的。它只生成一個值。
我嘗試了其他幾件事,沒有任何效果。有任何想法嗎?
uj5u.com熱心網友回復:
試一試:
def add_column(df):
"""
df: pandas dataframe
"""
df['col3'] = np.random.randint(0, 100, len(df))
df['col3'] = df.apply(lambda x: x['col3'] if x['col1'] > 5 and x['col2'] > '2022-03-10' else np.nan, axis=1)
return df
uj5u.com熱心網友回復:
無需使用np.where. 只需使用pandas.loc:
df.loc[(df['col1'] > 5) & (df['col2' > '2022-03-01'), 'new_column'] = np.random.random()
uj5u.com熱心網友回復:
你可以試試這個:
m = (df['col1'] >5) & (df['col2'] > pd.Timestamp('2022-03-01'))`
df.loc[m, 'new'] = np.random.random(sum(m))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/461625.html
