有没有办法使用pandas.apply和可变数量的多个列式参数?例如,假设我有这个数据框:
dictionary.objectForKey("badges")
我想编写一个连接列的函数来生成一个新列 - 与此SO question非常相似。因此,两列示例将是:
df = pd.DataFrame({'A':['a','b','c'],
'B':['a','b','c'],
'C':['a','b','c'],
'D':['a','b','c']})
我使用像这样的功能
def dynamic_concat_2(df, one, two):
return df[one]+df[two]
现在我无法弄清楚的难点是如何为未知的动态数量的列执行此操作。有没有办法使用** kwargs来推广函数?那么连接可能是1-n列?
附加上下文:这是动态计算行级数据的更大问题的简单示例。未知数量的列具有指定对数据库的查询的数据 - 这将被提供给查询并返回值。我写了一些真正不灵活的可怕的非pythonic解决方案(想想循环遍历每一行数据),但这些解决方案没有奏效。我希望使用df.apply可以python-ify的东西。
答案 0 :(得分:1)
如果我理解您的问题,在我看来,最简单的解决方案是首先从数据框中选择列,然后应用连接所有列的函数。在我看来,这是动态的,但更清洁。
例如,使用上面的数据:
cols = ['A', 'B', 'C']
df['concat'] = df[cols].apply(''.join, axis=1)
这样
>>> df
A B C D concat
0 a a a a aaa
1 b b b b bbb
2 c c c c ccc