【问题标题】:Pandas For Loop, If String Is Present In ColumnA Then ColumnB Value = XPandas For 循环,如果列中存在字符串,则列值 = X
【发布时间】:2021-06-30 20:05:46
【问题描述】:

我正在从 Binance REST API 中提取 Json 数据,格式化后我留下以下内容...

我有一个名为 Assets 的数据框,其中包含 3 列 [Asset,Amount,Location],

['Asset'] 包含加密资产的代码名称,例如(ETH、LTC、BNB)。 但是,当该资产的全部或部分已移至“Binance Earn”时,字符串会像这样返回,例如(LDETH,LDLTC,LDBNB)。

['Amount'] 现在可以忽略。

['Location'] 最初为空。 如果 ['Asset'] 中的字符串包含 'LD',我正在尝试将 ['Location'] 的值设置为 'Earn'。

这就是我的进展,但我不记得如何仅将更改应用于当前项目,自从我使用 Pandas 或 for 循环以来已经有很多年了。 而且我只能将其应用于整个列而不是行迭代。


for Row in Assets['Asset']:
    if Row.find('LD') == 0:
        print('Earn')
        Assets['Location'] = 'Earn' # <----How to apply this to current row only
    else:
        print('???')
        Assets['Location'] = '???' # <----How to apply this to current row only

打印语句正常工作,但目前整个列填充的值与您预期的相同(以最后一个为准)。 所以 (LDETH,HOT,LDBTC) 返回 ('Earn','Earn','Earn') 而不是期望的 ('Earn','???','Earn')

任何帮助将不胜感激......

【问题讨论】:

标签: python pandas rest for-loop iteration


【解决方案1】:

一种可能的解决方案:

def get_loc(row):
    asset = row['Asset']
    if asset.find('LD') == 0:
        print('Earn')
        return 'Earn'
    print('???')
    return '???'

Assets['Location'] = Assets.apply(get_loc, axis=1)

请注意,您几乎不应该遍历 pandas 数据框或系列。

【讨论】:

    【解决方案2】:

    您可以在 df.apply 中运行 lambda 来检查“LD”是否在 df['Asset'] 中:

    df['Location'] = df['Asset'].apply(lambda x: 'Earn' if 'LD' in x else None)
    

    【讨论】:

    • 是的,做到了!非常感谢!
    • 有没有办法让它专门在 ['Asset'] 列中查找'LD'?现在,一些更改要求我找到 x 的子字符串,如果存在于 ['Asset'] 列中,则将 'Earn' 应用于 ['Location'] 列。
    • 我的回答仅将 lambda 应用于 Asset 列。如果您想使用不同的子字符串,只需将 'LD' 替换为新的子字符串。
    • 不,我的意思是我需要它来检查整个专栏……每一项。不仅仅是x。同一列内还有另一个字符串实例(没有“LD”),如果它发现它应该应用“Earn”。
    • 但是x 已经代表了Asset 列中一个单元格的整个值。 lambda 遍历列,因此它涵盖了列中的每个项目。 if 'LD' in x 询问 LD 是否是 x 的子字符串。要查找多个子字符串,您可以将 if 'LD' in x 替换为 if any(s in x for s in ['LD', 'other_substring'])
    【解决方案3】:

    np.where() 适合这里。如果Asset以LD开头,则返回Earn,否则返回???:

    Assets['Location'] = np.where(Assets['Asset'].str.startswith('LD'), 'Earn', '???')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2023-01-24
      • 2018-12-21
      相关资源
      最近更新 更多