【问题标题】:Writing the output of df.apply() to multiple columns at once一次将 df.apply() 的输出写入多个列
【发布时间】:2019-04-13 16:27:12
【问题描述】:

我正在尝试编写一个函数的结果,该函数将多个参数返回到多个 Pandas 列。

最初,我使用 zip(*df.apply(..) ),但这感觉非常“hacky”且不符合 Python 风格。

我发现 df.apply() 有一个参数 result_type='expand',这似乎符合我的要求:返回多个列。

但是,当将此结果扩展到列时,我收到了非常奇怪的结果(请参阅代码)。

df['A'] = range(4)

def square(row):
    return row['A']**2, row['A']**3
df.apply(square, axis=1, result_type='expand')
>>>
    0   1
0   0   0
1   1   1
2   4   8
3   9   27
df['B'], df['C'] = df.apply(square, axis=1, result_type='expand')
df
>>>
    A   B   C
0   0   0   1
1   1   0   1
2   2   0   1
3   3   0   1

我希望 DF['B'] 和 DF['C'] 包含返回的列 0 和 1 以及正确的值,但它们包含系列 0 和系列 1。

将应用函数的结果写入多个 DataFrame 列的正确和 Pythonic 方式是什么?

【问题讨论】:

  • 你能把原来的df也发一下吗?
  • df 是一个空数据框:import pandas as pd df = pd.DataFrame()

标签: python pandas


【解决方案1】:

尝试在创建 2 个新列时分配展开,例如:

df[['B','C']]=df.apply(square, axis=1, result_type='expand')
print(df)

   A  B   C
0  0  0   0
1  1  1   1
2  2  4   8
3  3  9  27

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2016-09-22
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多