如何将另一个系列传递给Pandas.Series.str.开始

2024-09-27 00:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含两列的数据框: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

我想知道是否有一个更优雅的方法来使用熊猫.Series.str.开始,例如:

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

Tags: 数据nameinimportpandasdfuidas
1条回答
网友
1楼 · 发布于 2024-09-27 00:18:43

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

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版本比您的版本慢(至少在您的数据集上是这样),所以如果速度很重要的话,这比您的版本快一点,但是您的数据帧只需要包含两列:

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

相关问题 更多 >

    热门问题