Python 如何比较数据框中的多行并编辑ID匹配上的某些值
假设我有一个df:Python 如何比较数据框中的多行并编辑ID匹配上的某些值,python,pandas,dataframe,conditional-statements,Python,Pandas,Dataframe,Conditional Statements,假设我有一个df: df = pd.DataFrame({'src':['LV','LA','NC','NY','ABC','XYZ'], 'dest':['NC','NY','LV','LA','XYZ','ABC'], 'dummy':[1,3,6,7,8,10], 'pair':[1,2,1,2,3,3]}) src dest dummy pair LV NC 1 1 LA NY 3 2 NC LV
df = pd.DataFrame({'src':['LV','LA','NC','NY','ABC','XYZ'], 'dest':['NC','NY','LV','LA','XYZ','ABC'], 'dummy':[1,3,6,7,8,10], 'pair':[1,2,1,2,3,3]})
src dest dummy pair
LV NC 1 1
LA NY 3 2
NC LV 6 1
NY LA 7 2
ABC XYZ 8 3
XYZ ABC 10 3
其中“pair”列是匹配src/dest组合的id,如(a->b,b->a)
假设每对只有2个相同的ID,因为只有一条前进路径和一条后退路径(因此1,1…2,2…等)
如何比较对之间的“伪”值?如果一行的伪值大于同一对的另一行,则“g”将附加到“dest”值,然后“g”将附加到行中的“src”值,以获得较小的伪值
src dest dummy pair
LVg NC 1 1
LAg NY 3 2
NC LVg 6 1
NY LAg 7 2
ABCg XYZ 8 3
XYZ ABCg 10 3
例如,在对“2”中,第二行具有较高的伪值7,因此dest追加了“g”,因此较低的伪值行追加了“g”,以反映更改。您可以尝试以下操作:
df = pd.DataFrame({'src':['LV','LA','NC','NY','ABC','XYZ'], 'dest':['NC','NY','LV','LA','XYZ','ABC'], 'dummy':[1,3,6,7,8,10], 'pair':[1,2,1,2,3,3]})
def f(x):
x.iloc[0, x.columns.get_loc('src')] += 'g'
x.iloc[1, x.columns.get_loc('dest')] += 'g'
return x
df.sort_values('dummy').groupby('pair').apply(f)
输出:
src dest dummy pair
0 LVg NC 1 1
1 LAg NY 3 2
2 NC LVg 6 1
3 NY LAg 7 2
4 ABCg XYZ 8 3
5 XYZ ABCg 10 3
详情:
对于预排序的数据帧,我们获取记录组(本例中为2条记录),并将它们作为数据帧传递给辅助函数f,并使用
apply
。在f中,使用整数位置,iloc
将“g”附加到第一条记录和“src”中,使用x的列标题中的get_loc
通过位置确定,并将“g”附加到第二条记录和与“dest”匹配的列中,然后返回该更新数据帧。已签出!您能解释一下helper函数是如何工作的吗?当然,对于预排序的数据帧,我们将记录组(本例中为2条记录)作为数据帧传递给helper函数f。在f中,使用整数位置,iloc将“g”附加到第一条记录和第一列,并将“g”附加到第二条记录的第二列,然后返回更新数据帧。我如何编辑iloc以根据“src”和“dest”名称进行匹配?在我的实际df中,我有更多的列,并且顺序可能不同。很好的解释顺便说一句谢谢:)更新。用于获取“src”和“dest”列的位置。