同时转换数据框中的多个列

时间:2018-05-21 04:48:53

标签: python python-3.x pandas

我有一些我试图清理的数据。这涉及修改一些列,将其他cols组合成新的列等等。我想知道是否有一种方法可以在pandas中以简洁的方式执行此操作,或者每个操作是否需要单独的代码行。这是一个例子:

ex_df = pd.DataFrame(data = {"a": [1,2,3,4], "b": ["a-b", "c-d", "e-f", "g-h"]})

假设我要创建一个名为c的新列,该列将是b每行中的第一个字母,我想通过删除&#34来转换b - ",我想创建另一个名为d的col,它将是b与同一行a中的条目连接的第一个字母。现在我必须做这样的事情:

ex_df["b"] = ex_df["b"].map(lambda x: "".join(x.split(sep="-")))
ex_df["c"] = ex_df["b"].map(lambda x: x[0])
ex_df["d"] = ex_df.apply(func=lambda s: s["c"] + str(s["a"]), axis=1)
ex_df
#   a   b   c   d
#0  1   ab  a   a1
#1  2   cd  c   c2
#2  3   ef  e   e3
#3  4   gh  g   g4

来自R data.table背景(将所有这些操作合并为一个语句),我想知道pandas是如何完成的。

2 个答案:

答案 0 :(得分:1)

您可以使用:

In [12]: ex_df.assign(
    ...:     b=ex_df.b.str.replace('-', ''),
    ...:     c=ex_df.b.str[0],
    ...:     d=ex_df.b.str[0] + ex_df.a.astype(str)
    ...: )
Out[12]: 
   a   b  c   d
0  1  ab  a  a1
1  2  cd  c  c2
2  3  ef  e  e3
3  4  gh  g  g4

答案 1 :(得分:0)

这是一种方法。

<强>演示:

import pandas as pd
ex_df = pd.DataFrame(data = {"a": [1,2,3,4], "b": ["a-b", "c-d", "e-f", "g-h"]})
ex_df["c"] = ex_df["b"].str[0]
ex_df["b"] = ex_df["b"].str.replace("-", "")
ex_df["d"] = ex_df.apply(lambda s: s["c"] + str(s["a"])), axis=1)
print(ex_df)

<强>输出:

   a   b  c   d
0  1  ab  a  a1
1  2  cd  c  c2
2  3  ef  e  e3
3  4  gh  g  g4

您可以使用str方法中的构建来生成所需的输出。