我有一些我试图清理的数据。这涉及修改一些列,将其他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是如何完成的。
答案 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
方法中的构建来生成所需的输出。