python - 如何正确调用函数并返回更新的数据框?

标签 python dataframe apply

我正在尝试通过函数处理和更新数据框中的行,然后返回数据框以完成使用。当我尝试将数据框返回到原始函数调用时,它返回一个系列而不是预期的列更新。下面是一个简单的例子:

df = pd.DataFrame(['adam', 'ed', 'dra','dave','sed','mike'], index =
['a', 'b', 'c', 'd', 'e', 'f'], columns=['A'])

def get_item(data):
    comb=pd.DataFrame()
    comb['Newfield'] = data     #create new columns
    comb['AnotherNewfield'] = 'y'

return pd.DataFrame(comb)

使用 apply 调用一个函数:

>>> newdf = df['A'].apply(get_item)

>>> newdf
a          A   Newfield AnotherNewfield
a  adam  st...
b          A   Newfield AnotherNewfield
e   sed  st...
c          A   Newfield AnotherNewfield
d  dave  st...
d          A   Newfield AnotherNewfield
d  dave  st...
e          A   Newfield AnotherNewfield
s   NaN  st...
f         A   Newfield AnotherNewfield
m  NaN  str(...
Name: A, dtype: object
>>> type(newdf)
<class 'pandas.core.series.Series'>

我假设 apply() 在这里不好,但我不太确定我“应该”如何通过函数更新此数据框。

编辑:我深表歉意,但我似乎在编辑时不小心删除了示例函数。当我尝试在其他帖子中发现的一些其他内容时,将其添加回此处。

以稍微不同的方式测试单个变量 - 并返回多个系列变量 -> 似乎有效,所以我会看看这是否是我可以在我的实际情况下做的事情并更新。

def get_item(data):

    value = data     #create new columns
    AnotherNewfield = 'y'
    return pd.Series(value),pd.Series(AnotherNewfield)
df['B'], df['C'] = zip(*df['A'].apply(get_item))

最佳答案

您可以使用 groupbyapplyapply 调用中获取数据帧,如下所示:

import pandas as pd

# add new column B for groupby - we need single group only to do the trick
df = pd.DataFrame(
    {'A':['adam', 'ed', 'dra','dave','sed','mike'], 'B': [1,1,1,1,1,1]},
    index=['a', 'b', 'c', 'd', 'e', 'f'])

def get_item(data):
    # create empty dataframe to be returned
    comb=pd.DataFrame(columns=['Newfield', 'AnotherNewfield'], data=None)
    # append series data (or any data) to dataframe's columns 
    comb['Newfield'] = comb['Newfield'].append(data['A'], ignore_index=True)
    comb['AnotherNewfield'] = 'y'
    # return complete dataframe
    return comb

# use column B for group to get tuple instead of dataframe
newdf = df.groupby('B').apply(get_item)
# after processing the dataframe newdf contains MultiIndex - simply remove the 0-level (index col B with value 1 gained from groupby operation)
newdf.droplevel(0)

输出:

    Newfield    AnotherNewfield
0   adam        y
1   ed          y
2   dra         y
3   dave        y
4   sed         y
5   mike        y

关于python - 如何正确调用函数并返回更新的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69020920/

相关文章:

python - 维基百科页面上的塞德尔算法是否不正确?

python - 如何调试未调用的 __del__()

python - 调试时在 pool.close() 上抛出异常,但在运行时不会

python线性回归以日期为轴

python - 从 Pandas 数据帧生成相似度矩阵

r - 如何提取 10 个字符数字的前 6 位数字并将其转换为 as.Date?

r - 将数据框中的每个元素除以第二个数据框中的特定元素

r - 在R中的多个文件上应用相同的功能

r - 从多个数据框中选择第一行并绑定(bind)

python - 如何使用 pandas 在 python 中编写 excel 行