使用值 'bingo' 或 'nop' 在数据框中创建一个新列,具体取决于该行是否包含所有回文
Create a new column in a dataframe with the values 'bingo' or 'nop' depending on if the row contains all palindromes or not
(抱歉,不得不删除我之前的 post 来修复一些东西。)
我最近在一次面试中遇到了这个问题,运行 没时间(在此之前我还有其他问题要解决)。后来我回去解决了它,但我只是想知道其他人会如何解决这个问题。我在编程方面还是有点初学者,所以我的回答很可能不是最好的。
我得到了以下代码:
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)) returns 是的所以我相信我已经解决了这个问题。感谢您的任何建议,很想看看其他人如何更有效地解决这个问题。
您可以使用 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
(抱歉,不得不删除我之前的 post 来修复一些东西。)
我最近在一次面试中遇到了这个问题,运行 没时间(在此之前我还有其他问题要解决)。后来我回去解决了它,但我只是想知道其他人会如何解决这个问题。我在编程方面还是有点初学者,所以我的回答很可能不是最好的。
我得到了以下代码:
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)) returns 是的所以我相信我已经解决了这个问题。感谢您的任何建议,很想看看其他人如何更有效地解决这个问题。
您可以使用 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