简而言之:
df = data.frame(a = letters[1:5], b = letters[6:10], c = letters[11:15],stringsAsFactors = F)
df$tot = apply(df,MARGIN = 1,function(x){paste(x,collapse = "")})
我在Python Pandas中尝试过:
df.apply(lambda row: ''.join(str(row)), axis=1)
它会导致一个疯狂的结果,也会在列字符串中添加列标题。
我必须从R迁移到Python,我发现它非常违反直觉,可以做一些简单的事情,比如这个操作。任何人都可以解释为什么包含colnames的逻辑吗?
答案 0 :(得分:3)
当你这样做时
df.apply(lambda row: ''.join(str(row)), axis=1)
row是一个pandas系列,str(row)是这个系列的字符串表示(当你打印(行)时可以看到)。
如果我正确地理解了你想要做什么,你想获得系列中的值列表并将它们连接起来。这可以写成:
df.apply(lambda row: "".join(row.values), axis=1)
答案 1 :(得分:3)
str(row)将行转换为字符串,例如:
str([1, 2, 3]) => '[1, 2, 3]'
str(['a','b']) => '["a", "b"]'
和''。join(x)其中x是一个字符串,返回相同的字符串。所以你的lambda会在字符串中转换一行。
但似乎你想要的是:在加入行之前将行的每个元素转换为字符串:
lambda row: ''.join(str(x) for x in row)