我是python和编程的新手。
我试图弄清楚如何在pandas中不同列中的相应位置返回逗号分隔值,并将此输出存储在新列中。请参阅下面的示例
key_list = [cat, dog, pig]
A B
---------------------
1 cat
1, 2 dog, cat
1, 2, 3 pig, dog, cat
我想要一个输出如下:
A B cat_result dog_result pig_result
----------------------------------------------------------------
1 cat 1 NAN NAN
6, 2 dog, cat 2 6 NAN
8, 3, 1 pig, dog, cat 1 3 8
所以,我希望能够检查B列中是否存在键(a,b或c),然后如果它存在,则返回A列中相应逗号分隔值的值在那个细胞内。
到目前为止,我有这个:
for key in key_list:
df["{}_result".format{key}] = df.apply(lambda _: int(key in _.B), axis=1)
这将为每个key_result创建一个新列,如果密钥存在于B中则给出1,否则为0。不知道从哪里开始或者这是正确的方法。任何帮助深表感谢。谢谢!
答案 0 :(得分:1)
我在np.core.defchararray.split
中使用lambda
来帮助拆分列的值。我可以使用pd.Series.str.split
,但我选择了这个。
然后我使用lambda
并逐行迭代以创建字典列表。然后可以将该词典列表传递给pd.DataFrame
构造函数。
最后,我使用join
附加原始数据框。
s = lambda x: np.core.defchararray.split(x.values.astype(str), ', ')
df.join(
pd.DataFrame(
[dict(zip(*t)) for t in zip(s(df.B), s(df.A))]
).add_suffix('_result')
)
A B cat_result dog_result pig_result
0 1 cat 1 NaN NaN
1 6, 2 dog, cat 2 6 NaN
2 8, 3, 1 pig, dog, cat 1 3 8