代码片段
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中的每一行进行迭代,并返回一个新的_-df,该_-df最终需要追加到mydf中,但apply只返回一个Series对象,新的_-df被转换成一个序列,其中所有的列和行在追加到mydf后被放入一个单元格中
是否允许dataframe.apply返回原始数据帧
使用示例更新:
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))
新的_df应该是这样的
router vpn peer
RouterA vpn1 10.1.1.1
RouterA vpn1 10.1.1.2
RouterA vpn1 10.1.1.3
并附加到我的_-df中,因此每个路由器+vpn将返回一个多行数据帧并返回到我的_-df
更新(不适用,只适用于iterrows)
原因: 我发现类似的问题(https://stackoverflow.com/a/45946771/7035448)要求每个应用程序有多行,并发现这是可行的,并且以某种方式接受了使用pd.apply(https://stackoverflow.com/a/13052373/7035448)的答案对我不起作用
这可以通过itterrows完成![enter image description here](https://i.stack.imgur.com/OfjpL.png)
是的,在大多数用例中,我只需要序列,但当我们需要dataframe时,当出现类似于apply的情况时,需要返回列表,该列表被拆分为列,例如取自pd.apply,在这种情况下,result_type参数会很有帮助
看看这张图片,它应该解释一下![enter image description here](https://i.stack.imgur.com/Iap4B.png)
上述参数result_type的使用为您提供了一个数据帧而不是序列。由于还不清楚您的func将如何执行,但根据您所描述的
rows are being throw into 1 single cell
,应该是这样。我想是吧相关问题 更多 >
编程相关推荐