Python 无循环的行式操作

Python row wise operation without loops

已解决: 感谢@mozway 的帮助,我解决了我的问题。 基本上合并 df,将它们分组并将它们组合成一列 + 删除重复项。

df2 = df2.merge(df1, how='left', left_on=df2["code2_firstTwoDigits"], right_on=df1["code"])
df2['code'] = df2.groupby(['code2_firstTwoDigits'])['code'].transform(lambda x : ', '.join(x))
df2= df2.drop_duplicates()

我想按行执行操作,但我读到,作为一个 Python 新手,我不应该在 Python.

中使用循环

我有两个数据框,基本上是这样的

df1 =
   code    random_values   code_Values
0   1234    house           3.21
1   2345    car             5.32
2   2342    white           1.00
3   2344    wolf            2.23
4   2345    black           5.00
5   3456    house           5.99
6   3422    car             3.21
7   3666    white           5.32
8   4567    wolf            1.00
9   4511    black           2.23
10  4721    red             5.00

df2 = 
   code2   random_values   code2_firstTwoDigits
0   1264    house           12
1   2397    car             23
2   3498    white           34
3   4588    wolf            45
4   6388    black           63

我可能试图一次执行太多操作,我感觉我的大脑没有适应来自 C# 的 Python。但我想做的是:

如果不再次混淆就很难解释,所以我尝试用视觉表示我的问题,我希望它看起来像这样:

df3 = 
    code2   random_values   code2_firstTwoDigits    SameCodeStructure           SameCodeStructure_SumOfValues
0   1264    house           12                      1234                        3.21
1   2397    car             23                      2345, 2342, 2344, 2345      13.55
2   3498    white           34                      3456, 3422                  9.2
3   4588    wolf            45                      4567, 4511                  3.23
4   6388    black           63                      -                           -

我设法查找了单行 (3) 的匹配代码,但我正在努力寻找帮助如何将其转换为 df2 所有行的整体解决方案

pd.Series(df2[ df2["code2"].str.match (df1.iloc[3]["code_Values"] ) ]["code2"]).str.cat(sep=", ", others=None)

感谢所有的建议。 Python 对我来说,在“编写代码量”方面似乎更容易,但在“更少代码”方面确实很难思考

输出的确切逻辑不清楚,但你想要 mergegroupby+agg:

(df1.merge(df2, left_on=df1['code']//100, right_on='code2_firstTwoDigits', suffixes=('', '_2'))
    .groupby('code2_firstTwoDigits')
    .agg({'code_Values': 'sum',
          'code': list,
          'random_values': 'first'})
)

输出:

                      code_Values                      code random_values
code2_firstTwoDigits                                                     
12                           3.21                    [1234]         house
23                          13.55  [2345, 2342, 2344, 2345]           car
34                           9.20              [3456, 3422]         house
45                           3.23              [4567, 4511]          wolf