如何根据同一列中的值更改pandas数据库列中的值?

时间:2018-07-27 00:15:34

标签: python pandas dataframe

我的熊猫数据框非常大。

基本上,我希望所有具有甚至一个“是”的星期都更改为“是”,即使它们没有特别的“是”值,但共享特征周。

下面是一个小例子,解释了我想要的内容(抱歉,我是堆栈溢出的新手)

当前:

 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

3 个答案:

答案 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