【问题标题】:Set values in a column based on the values of other columns as a group根据其他列的值作为组设置列中的值
【发布时间】:2021-12-19 13:14:25
【问题描述】:

我有一个看起来像这样的 df:

  name A B C D
1 bar  1 0 1 1
2 foo  0 0 0 1
3 cat  1 0-1 0
4 pet  0 0 0 1
5 ser  0 0-1 0
6 chet 0 0 0 1

我需要使用 loc 方法根据其他列的值作为一个组在新列 ('E') 中添加值,例如如果值是 [1,0,0,0] 值E 列将是 1。我试过这个:

d = {'A': 1, 'B': 0, 'C': 0, 'D': 0}
A = pd.Series(data=d, index=['A', 'B', 'C', 'D']) 
df.loc[df.iloc[:, 1:] == A, 'E'] = 1

没有用。我需要使用 loc 方法或其他基于 numpy 的方法,因为数据集很大。如果可以避免创建一个系列来比较也很好的行,那么可以以某种方式提取 A B C D 列的值并将它们作为每行的一个组进行比较。

【问题讨论】:

    标签: python pandas dataframe pandas-loc


    【解决方案1】:

    您可以将值与A 进行比较并测试是否匹配DataFrame.all 中的所有行:

    df.loc[(df == A).all(axis=1), 'E'] = 1
    

    对于0,1 列:

    df['E'] = (df == A).all(axis=1).astype(int)
    
    df['E'] = np.where(df == A).all(axis=1), 1, 0)
    

    【讨论】:

    • 问题是我需要使用 .iloc ,因为 df 的其他列具有其他值。我解决了我的问题。另外,如果可能的话,我只想直接检查这些值,而不必创建一个系列来比较它们。
    • @Gus 所以使用df.loc[(df.iloc[:,1:]== A).all(axis=1), 'E'] = 1
    • jezrael 有没有办法将“A”替换为 [0,0,0,1] 之类的东西,以避免创建系列?
    • @Gus 当然,这里可以使用A = [0,0,0,1]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2019-08-02
    • 2019-12-27
    • 2020-05-23
    • 2019-02-27
    相关资源
    最近更新 更多