识别字符串在一行中多次存在的实例 + Python, Pandas, Dataframe
Identify instances where string exists more than once in a row + Python, Pandas, Dataframe
我想编写一个脚本来识别单词(字符串)在 pandas 数据帧的一行中多次出现的实例。
使用 lambda 函数我可以连续识别字符串的存在,但是我找不到任何关于如何识别字符串的“2 个或更多”实例的信息,这是我的一个例子目前有:
df = pd.DataFrame({'ID':[1,2,3],'Ans1':['Yes','Yes','Yes'],'Ans2':['No','Yes','No'],'Ans3':['No','No','No']})
df['Result'] = df.apply(lambda row: row.astype(str).str.contains('Yes').any(), axis=1)
df
我想要得到的伪代码:
if 'Yes' isin row > 1:
df['Results'] == True
想要的结果:
ID Ans1 Ans2 Ans3 Result
1 Yes No No False
2 Yes Yes No True
3 Yes No No False
试试,如果你不想检查整个dataframe是否是,你可以做列过滤,然后使用eq
, equals to, and sum
with axis=1 to sum values along rows then check to see if that sum is gt
,大于,1:
df['Result'] = df.eq('Yes').sum(1).gt(1)
输出:
ID Ans1 Ans2 Ans3 Result
0 1 Yes No No False
1 2 Yes Yes No True
2 3 Yes No No False
这段代码应该可以解决您的具体情况。它确实将您的伪代码实现到每一行。
def check_row(row):
count = 0
for i in row:
if i == 'Yes':
count += 1
if count > 1:
return True
else:
return False
df['Results'] = df.apply(check_row, axis=1)
您还可以这样做:
df['Result'] = df[df == 'Yes'].count(axis=1).gt(1)
我想编写一个脚本来识别单词(字符串)在 pandas 数据帧的一行中多次出现的实例。
使用 lambda 函数我可以连续识别字符串的存在,但是我找不到任何关于如何识别字符串的“2 个或更多”实例的信息,这是我的一个例子目前有:
df = pd.DataFrame({'ID':[1,2,3],'Ans1':['Yes','Yes','Yes'],'Ans2':['No','Yes','No'],'Ans3':['No','No','No']})
df['Result'] = df.apply(lambda row: row.astype(str).str.contains('Yes').any(), axis=1)
df
我想要得到的伪代码:
if 'Yes' isin row > 1:
df['Results'] == True
想要的结果:
ID Ans1 Ans2 Ans3 Result
1 Yes No No False
2 Yes Yes No True
3 Yes No No False
试试,如果你不想检查整个dataframe是否是,你可以做列过滤,然后使用eq
, equals to, and sum
with axis=1 to sum values along rows then check to see if that sum is gt
,大于,1:
df['Result'] = df.eq('Yes').sum(1).gt(1)
输出:
ID Ans1 Ans2 Ans3 Result
0 1 Yes No No False
1 2 Yes Yes No True
2 3 Yes No No False
这段代码应该可以解决您的具体情况。它确实将您的伪代码实现到每一行。
def check_row(row):
count = 0
for i in row:
if i == 'Yes':
count += 1
if count > 1:
return True
else:
return False
df['Results'] = df.apply(check_row, axis=1)
您还可以这样做:
df['Result'] = df[df == 'Yes'].count(axis=1).gt(1)