python - 如何根据列的值更新列值及其相应的索引?

标签 python pandas if-statement for-loop dataframe

在以下结构的 pandas Dataframe 中:

mcve_data =

alfa   alfa_id     beta    beta_id
a,c    7           c,de    8
c,d    7           d,f     9
l,mnk  8           c,d     9
j,k    8           d,e     9
tk,l   8           n,k     11
  • 我想在每行中运行一个 for 循环,读取 key(alfa 和 beta)和 key_index(alfa_index、beta_index)中的值。
  • 如果中的值的长度超过3或者任何值的长度超过1个字符。我希望将 key-valueskey-index 都转换为句点 .

最终预期输出:

alfa   alfa_id     beta    beta_id
a,c    7           .      .
c,d    7           d,f     9
.      .           c,d     9
j,k    8           d,e     9
.      .           n,k     11

我想编写一个类似的函数(但它没有正常工作):

def check_and_convert(mcve_data):
    labels = (l, l + id) for l in mcve_data.columns.values

    def convert(lines):
        for l,id in labels:
            if len(l) > 3:
                l = '.'
                id = '.'
        return l, id

        write this back to the file.

任何建议,

最佳答案

您还可以使用 str 访问器一次性检查列中每个值的长度,从而跳过内部 for 循环:

keys = [k for k in df.columns if not k.endswith('_id')]
for k in keys:
    df.loc[df[k].str.len()>3,[k,k+'_id']] = '.'

关于python - 如何根据列的值更新列值及其相应的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43058100/

相关文章:

python - Python 中的 recv()

python - Gurobi Python == 和变量

javascript - 条件表达式和 if 语句哪个更好?

python - 在 python 中,如何限制每个 gvkey 插入虚拟一次?

python - Tensorflow 显式设备要求错误

python - 如何将数据框的 column_name 用作行上的值?

python - 前一年和明年的天数 - Pandas

python - 将嵌套 json 读取到数据框中

java - 第一次点击按钮后,按钮停止工作

python - Sympy 中的模计算失败