【问题标题】:Is there a way to iterate through list of string in a dataframe?有没有办法遍历数据框中的字符串列表?
【发布时间】:2022-07-17 04:11:31
【问题描述】:

我写了以下代码。我想将数字“1”替换为“0”,只要它针对特定的universal_id出现两次或更多,剩下的数字“1”应该在天数最低的行中。下面的代码可以完成工作,但我想迭代一个以上的universal_id。 “e”列适用于“efra”,我希望其他 ID 和其他列也可以这样做。

pdf1 = pd.DataFrame(
    [[1, 0,1, 0,1, 60, 'fdaf'],
     [1, 1,0, 0,1, 350, 'fdaf'],
     [1, 1,0, 0,1, 420, 'erfa'],
     [0, 1,0, 0,1, 410, 'erfa']],
    columns=['A', 'B', 'c', 'd', 'e', 'days','universal_id'])

pdf1['A'] = np.where(pdf1['days']==pdf1['days'].min(),1,0)
zet = pdf1.loc[pdf1['e'].isin([1]) & 
pdf1['universal_id'].str.contains('erfa')]
zet['e'] = np.where(zet['days']==zet['days'].min(),1,0)
pdf1.loc[zet.index, :] = zet[:]
pdf1

输出:

    A   B   c   d   e   days    universal_id
 0  1   0   1   0   1   60     fdaf
 1  0   1   0   0   1   350    fdaf
 2  0   1   0   0   0   420    erfa
 3  0   1   0   0   1   410    erfa

【问题讨论】:

  • 你能从样本数据中添加预期的输出吗?
  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 为什么不在 A oupout 1,0,0,1 中?
  • 你是 wright jezrael 它应该是 1,0,0,1

标签: python pandas dataframe iterator


【解决方案1】:

你可以使用:

df2 = pdf1.sort_values(by='days')

m1 = df2['A'].eq(1)
m2 = df2[['A', 'universal_id']].duplicated()

pdf1.loc[m1&m2, 'A'] = 0

输出:

   A  B  c  d  e  days universal_id
0  1  0  1  0  1    60         fdaf
1  0  1  0  0  1   350         fdaf
2  1  1  0  0  1   420         erfa
3  0  1  0  0  1   410         erfa

对于e,f你要遵循同样的逻辑:

m1 = df2['A'].eq(1)
m3 = df2[['e', 'universal_id']].duplicated()

pdf1.loc[m1&m3, 'e'] = 0

输出:

   A  B  c  d  e  days universal_id
0  1  0  1  0  1    60         fdaf
1  0  1  0  0  0   350         fdaf
2  1  1  0  0  0   420         erfa
3  0  1  0  0  1   410         erfa

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 2022-12-11
    • 1970-01-01
    • 2021-05-16
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2021-04-05
    相关资源
    最近更新 更多