(对不起,必须删除我以前的帖子才能解决问题。)
我最近在一次采访中为这个问题而苦苦挣扎,没有时间(在此之前我还有其他问题要解决)。我回过头来解决了这个问题,但是我只是想知道其他人如何解决这个问题。我仍然是编程的初学者,所以我的回答很可能不是最好的。
我得到了以下代码:
import pandas as pd
input_df = pd.DataFrame(
[
'Noon,Feature,Good'.split(','),
'Radar,Refer,Wow'.split(','),
'Other,Day,Mouse'.split(',')
],
columns='String_1,String_2,String_3'.split(',')
)
output_df = pd.DataFrame(
[
[1,0,0,'nop'],
[1,1,1,'bingo'],
[0,0,0,'nop']
],
columns='String_1,String_2,String_3,Bingo'.split(',')
)
因此,考虑到input_df,编写一个名为bingo的函数,它将产生给定的output_df。
这是我想出的:
def is_palindrome(s):
s = s.lower()
new_s = ""
for char in s:
if char.isalnum():
new_s += char
if new_s == new_s[::-1]:
return 1
else:
return 0
def bingo(df):
df = df.applymap(is_palindrome)
num_col = len(df.columns)
sums = df.apply(sum, axis=1)
values = []
for item in sums:
if item == num_col:
values.append('bingo')
else:
values.append('nop')
df['Bingo'] = values
return df
output_df.equals(bingo(input_df))返回True,所以我相信在这种情况下我已经解决了问题。感谢您提供任何建议,不妨看看其他人如何更有效地解决此问题。
您可以使用applymap来比较每个单元格及其反词,然后使用np.where来确定它是宾果游戏还是nop。
output_df = (
input_df.applymap(lambda x: int(x[::-1].lower()==x.lower()))
.assign(Bingo=lambda x: np.where(x.all(1), 'bingo', 'nop'))
)
String_1 String_2 String_3 Bingo
0 1 0 0 nop
1 1 1 1 bingo
2 0 0 0 nop