我的数据框如下所示。我需要将数据框中的列与字符串进行比较并创建新列。
数据帧:
14 {% load socialaccount %}
15 {% providers_media_js %}
16 <a href="{% provider_login_url "facebook" method="js_sdk" %}">Facebook Connect</a>
17
18 {% if user.is_authenticated %}
19
20 <a href="/accounts/logout">
21 <button class="btn btn-default">Logout</button>
22 </a>
23 {% else %}
24 <a href="/accounts/login">
25 <button class="btn btn-default">Login</button>
如果&#39; AB&#39;,&#39; AK&#39;&#39; SB&#39;在col_1中,它应该创建一个新的列,其中包含各自的值,否则&#39; *&#39;应该列在列值中。
预期产出:
col_1
AB_SUMI
AK_SUMI
SB_LIMA
SB_SUMI
XY_SUMI
我尝试使用以下代码,但没有解决。
col_1 new_col
AB_SUMI AB
AK_SUMI AK
SB_LIMA SB
SB_SUMI SB
XY_SUMI *
请在这方面帮助我。提前致谢
答案 0 :(得分:2)
您可以extract
使用regex
创建list
join
|
or
(NaN
),最后替换L= ['AB','AK','SB']
a = '(' + '|'.join(L) + ')'
print (a)
(AB|AK|SB)
df['new'] = df.col_1.str.extract(a, expand=False).fillna('*')
print (df)
col_1 new
0 AB_SUMI AB
1 AK_SUMI AK
2 SB_LIMA SB
3 SB_SUMI SB
4 XY_SUMI *
fillna
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.firebase.quickstart.fcm">
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<application
android:allowBackup="true"
android:icon="@mipmap/app_logo"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- [START fcm_default_icon] -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_stat_ic_notification" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
<!-- [END fcm_default_icon] -->
<activity
android:name="com.google.firebase.quickstart.fcm.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name="com.google.firebase.quickstart.fcm.CalendarActivity"
android:label="@string/calendar_activity_label">
</activity>
<!-- [START firebase_service] -->
<service
android:name=".MyFirebaseMessagingService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<!-- [END firebase_service] -->
<!-- [START firebase_iid_service] -->
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<!-- [END firebase_iid_service] -->
</application>
</manifest>
答案 1 :(得分:0)
一种有趣的方法
L = 'AB AK SB'.split()
c = df.col_1.values.astype(str)
f = lambda x, s : np.core.defchararray.find(x, s) >= 0
df.assign(new=np.stack([f(c, i) for i in L]).astype(object).T.dot(np.reshape(L, (-1, 1)))).replace('', '*')
col_1 new
0 AB_SUMI AB
1 AK_SUMI AK
2 SB_LIMA SB
3 SB_SUMI SB
4 XY_SUMI *