Python 处理数据帧以实现多个目标
df看起来像这样 s={0:[np.nan,'a','b','c','d'], 1:[A',8F',6',8',4F'], 2:[B',1',6',8F',3F'], 3:[C','1','8','8','1'], 4:[D',1',2F',6',8']} df=pd.DataFramedata=s 0 1 2 3 4 0 NaN A B C D 1A8F11 2 b 6 8 2F 3 c 8 F 8 6 4d4f3f18 首先,我想用F选择数据,并在新的数据帧上列出 价值 0 8F 14F 2 8F 3 3F 4 2F 第二,我想添加大写字母 价值上限 0 8F A 1 4F A 2 8F B 3F B 4 2F D 还有小写字母 值上下 0 8F A 1 4F A d 2 8F B c 3F B d 4 2F D b 最后,我想根据下表对每一行进行评论 上下数 0 A 9 1 A b 1 2 A c 2 3 A d 3 4 B a 0 5 B 4 6 B c 8 7 B d 3 8 C a 4 9 C b 8 10立方厘米4 11 C d 6 12 D a 4 13 D b 1 14 D c 4 第15天第3天 我将通过比较Value和Num来注释每一行 值上下注释 0 8F A更小 1 4F A d更大 2 8F B c相等 3 4F B d等于 4 2F D b更小 注意,我不想在代码中使用任何for循环。 希望有人能帮我解决这个烦人的问题 这里有一种使用合并并与df1比较的方法Python 处理数据帧以实现多个目标,python,pandas,dataframe,Python,Pandas,Dataframe,df看起来像这样 s={0:[np.nan,'a','b','c','d'], 1:[A',8F',6',8',4F'], 2:[B',1',6',8F',3F'], 3:[C','1','8','8','1'], 4:[D',1',2F',6',8']} df=pd.DataFramedata=s 0 1 2 3 4 0 NaN A B C D 1A8F11 2 b 6 8 2F 3 c 8 F 8 6 4d4f3f18 首先,我想用F选择数据,并在新的数据帧上列
df=df.astype(str)
s=df[df.applymap(lambda x : '(F)' in x)].stack().rename_axis(['Lower','Upper']).reset_index()
s['Comment']=np.sign((s[0].str.split('(').str[0].astype(int)-s.merge(df1).Num)).map({-1:'lt',0:'eq',1:'gt'})
s
Out[753]:
Lower Upper 0 Comment
0 a A 8(F) lt
1 b D 2(F) gt
2 c B 8(F) eq
3 d A 4(F) gt
4 d B 3(F) eq
这里有一种使用合并并与df1比较的方法
df=df.astype(str)
s=df[df.applymap(lambda x : '(F)' in x)].stack().rename_axis(['Lower','Upper']).reset_index()
s['Comment']=np.sign((s[0].str.split('(').str[0].astype(int)-s.merge(df1).Num)).map({-1:'lt',0:'eq',1:'gt'})
s
Out[753]:
Lower Upper 0 Comment
0 a A 8(F) lt
1 b D 2(F) gt
2 c B 8(F) eq
3 d A 4(F) gt
4 d B 3(F) eq
使用以下代码:
其中df和df1是给定的数据帧:
df2=pd.mergedf,df1,how='internal',left_on=['Upper',Lower'],right_on=['Upper',Lower']
df2['Comment']=df2.applylambda x:np.wherex['Num']>intx['Value'][0],'biger','minger',1
编辑1:
使用下面的命令获取上面使用的df:
l = []
df = df.replace("[0-9A-Za-z]$", np.nan, regex=True)
for col in range(len(df)):
l = l + df2.iloc[:,col].dropna().values.tolist()
df = pd.Series(df)
使用以下代码:
其中df和df1是给定的数据帧:
df2=pd.mergedf,df1,how='internal',left_on=['Upper',Lower'],right_on=['Upper',Lower']
df2['Comment']=df2.applylambda x:np.wherex['Num']>intx['Value'][0],'biger','minger',1
编辑1:
使用下面的命令获取上面使用的df:
l = []
df = df.replace("[0-9A-Za-z]$", np.nan, regex=True)
for col in range(len(df)):
l = l + df2.iloc[:,col].dropna().values.tolist()
df = pd.Series(df)
numpy.core.defchararray等
numpy.core.defchararray等
到目前为止你试过什么?最好显示您的代码,并显示您遇到的错误或意外结果,然后我们可以帮助您到目前为止尝试了什么?最好能显示你的代码,并显示你有什么错误或意外的结果,然后我们可以帮助我,我认为这代码不起作用,df没有字段上限或下限不?好吧,构建这些是手头的挑战,你可以现在试试吗?我认为这代码不起作用,df没有字段上限或下限不?好吧,构建这些是目前面临的挑战。请您现在试一试。当您使用np.where时,有没有办法通过pandas分别获取True的索引和列?当您使用np.where时,有没有办法通过pandas分别获取True的索引和列?