Python 如何比较数据框中的多行并编辑ID匹配上的某些值

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:

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”列的位置。