我的熊猫数据框非常大。
基本上,我希望所有具有甚至一个“是”的星期都更改为“是”,即使它们没有特别的“是”值,但共享特征周。
下面是一个小例子,解释了我想要的内容(抱歉,我是堆栈溢出的新手)
当前:
Week | Output
1 Yes
2 No
3 No
1 No
2 Yes
3 No
这就是我想要的:
Week | Output
1 Yes
2 Yes
3 No
1 Yes
2 Yes
3 No
答案 0 :(得分:0)
您可以计算至少有一个等于“是”的输出的星期。然后使用pd.DataFrame.loc
更新值:
# get array of weeks in scope
yes_weeks = df.loc[df['Output'] == 'Yes', 'Week'].unique()
# update values conditionally
df.loc[df['Week'].isin(yes_weeks), 'Output'] = 'Yes'
答案 1 :(得分:0)
使用any
df.loc[df.Output.eq('Yes').groupby(df['Week']).transform('any'),'Output']='Yes'
df
Out[534]:
Week Output
0 1 Yes
1 2 Yes
2 3 No
3 1 Yes
4 2 Yes
5 3 No
答案 2 :(得分:0)
一种不错的方法是使用默认的pd.Categorical
排序和transform
的默认广播行为。
df['Output'] = pd.Categorical(df.Output,
categories=["No", "Yes"],
ordered=True)
df['Output'] = df.groupby('Week').Output.transform('max')
Week Output
0 1 Yes
1 2 Yes
2 3 No
3 1 Yes
4 2 Yes
5 3 No