代码片段
根据代码片段显示,我正在尝试使用apply来迭代现有_df中的每一行,并返回一个需要最终附加到mydf的new_df,但apply仅返回一个Series对象,并将new_df转换为一个Series,其中所有列和行都被抛入一个单个单元格后附加到mydf中。
有没有办法让dataframe.apply返回原始的dataframe?
带有示例的更新:
def func(a_val, b_val):
...
return new_df
mydf = mydf.append(existing_df.apply(lambda x: func(x['A'], x['B']), axis=1), ignore_index=True)
根据代码片段显示,我正在尝试使用apply来迭代现有_df中的每一行,并返回一个需要最终附加到mydf的new_df,但apply仅返回一个Series对象,并将new_df转换为一个Series,其中所有列和行都被抛入一个单个单元格后附加到mydf中。
有没有办法让dataframe.apply返回原始的dataframe?
带有示例的更新:
import pandas as pd
existing_df = pd.DataFrame({'router': ['RouterA', 'RouterA', 'RouterB', 'RouterB'], 'vpn': ['vpn1', 'vpn2', 'vpn3', 'vpn4']})
cols = ['router', 'vpn', 'peer']
my_df = pd.DataFrame(columns=cols)
def func(router, vpn):
new_df = pd.DataFrame(columns=cols)
# look for extra information based on router + vpn, and return a dataframe. 1 vpn will return multiple peer result, and the result
# will need to return back to my_df.
return new_df
my_df = my_df.append(existing_df.apply(lambda x: func(x['router'], x['vpn']), axis=1))
新的数据框 new_df 应该长成这个样子
router vpn peer
RouterA vpn1 10.1.1.1
RouterA vpn1 10.1.1.2
RouterA vpn1 10.1.1.3
并将其附加到my_df中,因此每个路由器+ VPN将返回多个行数据框并返回到my_df。