正确办法 series 分列


解决

总结 如果输出多个值 一定要输出Series

import pandas as pd

# 传入ser/arg, df/args
# 输出arg/ser, args/df
def main() -> None:
    df = pd.DataFrame([[1, 2], [3, 4]])
    res = pd.DataFrame(columns=["a", "b"])

    # 传入ser, 输出arg
    # df.iloc[:, 0].map(lambda x: print(x))

    # 输出args, series.map不支持对行操作, 结果转置
    # res[["a", "b"]] = df.iloc[:, 0].map(lambda x: aid(*[x]))
    # print(res)

    # 传入df, 输出arg
    # df.apply(lambda x: print(x), axis=1)

    # 输出args, 对传入指定行操作, 但结果仍然转置
    # res[["a", "b"]] = df.apply(lambda x: aid(*x), axis=1)
    # print(res)

    # 总结: 输出args 会导致错误转置
    # 解决: 应当输出ser
    res[["a", "b"]] = df.apply(lambda x: resolve(*x), axis=1)
    print(res)

def aid(*args):
    print(args)
    lis = [j * 10 ** i for i, j in enumerate(args, start=1)]
    return lis[0], lis[-1]

def resolve(*args):
    print(args)
    lis = [j * 10 ** i for i, j in enumerate(args, start=1)]
    return pd.Series(lis)

if __name__ == '__main__':
    main()


import pandas as pd

# 传入ser/arg, df/args
# 输出arg/ser, args/df
def main() -> None:
    df = pd.DataFrame([[1, 2], [3, 4]])

    # 传入ser, 输出arg
    # df.iloc[:, 0].map(lambda x: print(x))

    # 输出args
    # df.iloc[:, 0].map(lambda x: aid(*[x]))

    # 传入df, 输出arg
    # df.apply(lambda x: print(x), axis=1)

    # 输出args
    # df.apply(lambda x: aid(*x), axis=1)

def aid(*args):
    print(args)
    lis = [j * 10 ** i for i, j in enumerate(args, start=1)]
    print(lis[0], lis[-1])

if __name__ == '__main__':
    main()