Python—基于数据帧中的多个其他列创建列
我想创建一个新列,它根据其他列中的值输出升序或降序Python—基于数据帧中的多个其他列创建列,python,pandas,dataframe,Python,Pandas,Dataframe,我想创建一个新列,它根据其他列中的值输出升序或降序 Index Leg Map Number 0 AD J1 1 1 AD J1 2 2 AD J1 3 3 AD J2 5 4 AD J2 3 4 AF J1 9 5 AF J1 6 因此,看看这个数据帧,我想创建一个新的列“updown”,它根据leg、map和number列升序或降序。基本上,对于
Index Leg Map Number
0 AD J1 1
1 AD J1 2
2 AD J1 3
3 AD J2 5
4 AD J2 3
4 AF J1 9
5 AF J1 6
因此,看看这个数据帧,我想创建一个新的列“updown”,它根据leg、map和number列升序或降序。基本上,对于每个支腿和地图配对,查看数字列以确定数字是升序还是降序…这将产生如下数据帧:
Index Leg Map Number Updown
0 AD J1 1 ascending
1 AD J1 2 ascending
2 AD J1 3 ascending
3 AD J2 5 descending
4 AD J2 3 descending
4 AF J1 9 descending
5 AF J1 6 descending
任何帮助都将不胜感激,您需要:
s=df.groupby(['Leg','Map'])['Number'].transform(lambda x: (x.diff()>0).any())
或:
“对于每条腿,如果地图相同,请查看数字列以确定顺序…”
如何?逻辑是什么?我不清楚输入是如何映射到输出的。您可能应该在这里为示例数据解释为什么使用升序
/降序
。我已经纠正了这个问题@harvpan您如何确定配对的第一次出现?@harvpan您可以通过查看每个配对来确定,而不仅仅是第一次出现的配对,只是一个快速的评论,实际上,groupby有一个是单调递增的方法
s=df.groupby(['Leg','Map'])['Number'].transform(lambda x: x.is_monotonic) #thanks Mark Wang
df['Updown']=np.where(s,'ascending','descending')
print(df)
Index Leg Map Number Updown
0 0 AD J1 1 ascending
1 1 AD J1 2 ascending
2 2 AD J1 3 ascending
3 3 AD J2 5 descending
4 4 AD J2 3 descending
5 4 AF J1 9 descending
6 5 AF J1 6 descending