gpt4 book ai didi

python - 如何将另一个系列传递给 pandas.Series.str.startswith

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:18 24 4
gpt4 key购买 nike

我有一个包含两列的 DataFrame:uid 和 name:

In[1]: import pandas as pd

In[2]: df = pd.DataFrame([['123', 'OneTwoThree'],
['456', '456 FourFiveSix'],
['789', 'SevenEightNine']],
columns = ['uid', 'name'])
In[3]: df
Out[3]:
uid name
0 123 OneTwoThree
1 456 456 FourFiveSix
2 789 SevenEightNine

我想选择名称以 uid 开头的行。我可以通过列表理解来做到这一点:

In[4]: df[[name.startswith(uid) for uid, name in zip(df.uid, df.name)]]
Out[4]:
uid name
1 456 456 FourFiveSix

我想知道是否有更优雅的方法使用 pandas.Series.str.startswith 来做到这一点,例如像这样的东西:

df[df.name.str.startswith(df.uid)]

最佳答案

我不知道是否更优雅,但它是另一种选择:

sw = lambda x: x["uid"] in x["name"]
df[df.apply(sw, axis=1)]

或者在一行中:

df[df.apply(lambda x: x["uid"] in x["name"], axis=1)]

如果 startswith 是一个要求:

sw2 = lambda x: x["name"].startswith(x["uid"])
df[df.apply(sw2, axis=1)]

事实证明 lambda 版本比你的慢(至少在你的数据集上),所以如果速度很重要,这比你的快一点,但你的数据框只需要包含 2 列:

df[[name.startswith(uid) for uid, name in df.values]]

关于python - 如何将另一个系列传递给 pandas.Series.str.startswith,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34907224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com