gpt4 book ai didi

python - 如何更改要应用的 iterrows 方法

转载 作者:行者123 更新时间:2023-12-02 16:01:18 24 4
gpt4 key购买 nike

我有这段代码,其中有大约 60k 行。完成整个过程大约需要 4 个小时。这段代码不可行,时间紧迫,想用apply代替iterrow。

这是代码,

all_merged_k = pd.DataFrame(columns=all_merged_f.columns)
for index, row in all_merged_f.iterrows():
if (row['route_count'] == 0):
all_merged_k = all_merged_k.append(row)
else:
for i in range(row['route_count']):
row1 = row.copy()
row['Route Number'] = i
row['Route_Broken'] = row1['routes'][i]
all_merged_k = all_merged_k.append(row)

基本上,代码所做的是,如果 route count 为 0,则追加同一行,如果不是,则无论计数的数量是多少,它都会追加相同行数除了 routes 列(因为它包含嵌套列表)之外的值,因此将它们分成多行。并将它们添加到名为 Route_BrokenRoute Number 的新列中。

数据样本:

               routes  route_count
[[CHN-IND]] 1
[[CHN-IND],[IND-KOR]] 2

订单数据:

               routes  route_count  Broken_Route Route Number
[[CHN-IND]] 1 [CHN-IND] 1
[[CHN-IND],[IND-KOR]] 2 [CHN-IND] 1
[[CHN-IND],[IND-KOR]] 2 [IND-KOR] 2

能不能用apply,因为4hrs很高,没法投入生产。我需要极端的帮助。请帮助我。

所以下面的代码不起作用

df.join(df['routes'].explode().rename('Broken_Route')) \
.assign(**{'Route Number': lambda x: x.groupby(level=0).cumcount().add(1)})

or

(df.assign(Broken_Route=df['routes'],
count=df['routes'].str.len().apply(range))
.explode(['Broken_Route', 'count'])
)

如果索引匹配就不行,我们可以看到最后一行,Route Number应该是1

最佳答案

你是否期待这样的事情:

>>> df.join(df['routes'].explode().rename('Broken_Route')) \
.assign(**{'Route Number': lambda x: x.groupby(level=0).cumcount().add(1)})

routes route_count Broken_Route Route Number
0 [[CHN-IND]] 1 [CHN-IND] 1
1 [[CHN-IND], [IND-KOR]] 2 [CHN-IND] 1
1 [[CHN-IND], [IND-KOR]] 2 [IND-KOR] 2
2 0 1

设置:

data = {'routes': [[['CHN-IND']], [['CHN-IND'], ['IND-KOR']], ''], 
'route_count': [1, 2, 0]}
df = pd.DataFrame(data)

更新 1:添加了一 strip 有 route_count=0routes='' 的记录。

关于python - 如何更改要应用的 iterrows 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70604625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com