正确办法 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()
















