Python 基于其他列的内容创建新列
我有一个数据框,如图所示 我想创建一个名为Python 基于其他列的内容创建新列,python,pandas,Python,Pandas,我有一个数据框,如图所示 我想创建一个名为Result 应根据以下规则创建结果 返回基于D、F、M、P列显示最多的值 如果IG和HY之间存在关联,则返回HY 不要将NaN计为一个值 生成的数据帧如下所示: 一个可能的解决方案如下。也许它不是最优雅的,但它很管用。 只有一个问题,如果在一行中你有所有的NaN,那么你将得到该行的“HY” import numpy as np import pandas as pd df_start = pd.DataFrame({'P':['IG','HY',
Result
应根据以下规则创建结果
IG
和HY
之间存在关联,则返回HY
NaN
计为一个值一个可能的解决方案如下。也许它不是最优雅的,但它很管用。 只有一个问题,如果在一行中你有所有的NaN,那么你将得到该行的“HY”
import numpy as np
import pandas as pd
df_start = pd.DataFrame({'P':['IG','HY','IG',np.nan,'HY'], 'M':['HY','HY','IG', np.nan,'IG'], 'F':['HY',np.nan,'HY', np.nan,'IG'],'D':['IG','IG','IG', 'HY','IG']})
def count_winner(words):
igc=0
hyc=0
for i in words:
if(i=="IG"):
igc+=1
elif(i=="HY"):
hyc+=1
if(igc<=hyc):
return("HY")
else:
return("IG")
words=df_start.to_string(header=False, index=False, index_names=False).split('\n')
words=[i.split(" ") for i in words]
winners=[count_winner(i) for i in words]
df_start["Result"]=winners
将numpy导入为np
作为pd进口熊猫
df_start=pd.DataFrame({'P':['IG','HY','IG',np.nan,'HY'],'M':['HY','HY','IG','np.nan,'IG'],'F':['HY',np.nan','HY np.nan,'IG'],'D':['IG','IG'IG','HY','IG'IG','IG']
def计数(大写):
igc=0
hyc=0
对于我来说,用文字来说:
如果(i=“IG”):
igc+=1
以利夫(i=“HY”):
hyc+=1
如果(igc一个可能的解决方案如下。也许它不是最优雅的,但它是有效的。
只有一个问题,如果在一行中你有所有的NaN,那么你将得到该行的“HY”
import numpy as np
import pandas as pd
df_start = pd.DataFrame({'P':['IG','HY','IG',np.nan,'HY'], 'M':['HY','HY','IG', np.nan,'IG'], 'F':['HY',np.nan,'HY', np.nan,'IG'],'D':['IG','IG','IG', 'HY','IG']})
def count_winner(words):
igc=0
hyc=0
for i in words:
if(i=="IG"):
igc+=1
elif(i=="HY"):
hyc+=1
if(igc<=hyc):
return("HY")
else:
return("IG")
words=df_start.to_string(header=False, index=False, index_names=False).split('\n')
words=[i.split(" ") for i in words]
winners=[count_winner(i) for i in words]
df_start["Result"]=winners
将numpy导入为np
作为pd进口熊猫
df_start=pd.DataFrame({'P':['IG','HY','IG',np.nan,'HY'],'M':['HY','HY','IG','np.nan,'IG'],'F':['HY',np.nan','HY np.nan,'IG'],'D':['IG','IG'IG','HY','IG'IG','IG']
def计数(大写):
igc=0
hyc=0
对于我来说,用文字来说:
如果(i=“IG”):
igc+=1
以利夫(i=“HY”):
hyc+=1
如果(igc使用模式
:
df_start['Result']= df_result.mode(1).iloc[:, 0]
输出:
P M F D Result
0 IG HY HY IG HY
1 HY HY NaN IG HY
2 IG IG HY IG IG
3 NaN NaN NaN HY HY
4 HY IG IG IG IG
使用模式
:
df_start['Result']= df_result.mode(1).iloc[:, 0]
输出:
P M F D Result
0 IG HY HY IG HY
1 HY HY NaN IG HY
2 IG IG HY IG IG
3 NaN NaN NaN HY HY
4 HY IG IG IG IG
扩展溶液
如果您想计算数据帧中的每个uniques值,并确定哪一个最常出现,可以使用下面的代码
细节
从给定的起始数据帧开始,NaN值将转换为字符串,以便对其进行比较。然后,在数据帧上使用查找唯一值的numpy方法。然后,使用这些值为每个唯一值创建一个新列,其中包含该行中该值的计数
第二个for循环遍历新df中的行,查找每行的最大值,并将该列的名称与唯一值列表进行比较
输入
输出:
欺骗
它不像@Scott的解决方案那样优雅,但如果您想对每个问题的出现次数做些什么,它确实增加了一些功能
它也不能解决挑选HY
而不是IG
,但如果不了解其背后的逻辑,就无法通过编程实现。扩展解决方案
如果您想计算数据帧中的每个uniques值,并确定哪一个最常出现,可以使用下面的代码
细节
从给定的起始数据帧开始,NaN值将转换为字符串,以便对其进行比较。然后,在数据帧上使用查找唯一值的numpy方法。然后,使用这些值为每个唯一值创建一个新列,其中包含该行中该值的计数
第二个for循环遍历新df中的行,查找每行的最大值,并将该列的名称与唯一值列表进行比较
输入
输出:
欺骗
它不像@Scott的解决方案那样优雅,但如果您想对每个问题的出现次数做些什么,它确实增加了一些功能
它也不能解决拾取HY
而不是IG
,但是如果不知道背后的逻辑,就不能通过编程来完成。你能以文本格式而不是图像的形式发布数据帧吗?只需复制并粘贴在这里。大家好,欢迎这样做。请看一下,我发布了代码片段为什么返回HY
IG
?那里的逻辑是什么?你能以文本格式而不是图像格式发布数据帧吗?只需复制并粘贴在这里。欢迎大家。请看一下,我发布了代码片段为什么返回HY
而不是IG
?那里的逻辑是什么?