首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pandas中遍历特定列

在Pandas中遍历特定列
EN

Stack Overflow用户
提问于 2022-04-20 10:55:54
回答 1查看 157关注 0票数 1

我有一个数据框架:

代码语言:javascript
复制
data = {'id': [1, 2, 3, 4, 5, 6, 7, 8],
        'stat': ['ordered', 'unconfirmed', 'ordered', 'unknwon', 'ordered', 'unconfirmed', 'ordered', 'back'],
        'date': ['2021', '2022', '2023', '2024', '2025','2026','2021', '1990']    
}
df_data = pd.DataFrame(data)
df_data

我对数据框架做了如下更改:

代码语言:javascript
复制
l = [1, 2, 1, 3, 1, 0, 0, 0]
df_d = df_data.join(pd.get_dummies(df_data.date).cumsum(axis=1).mul(lis, axis=0
    ).astype(int))
df_d

我想循环遍历特定的列,并在其中添加一些值,如下所示:

代码语言:javascript
复制
ln = len(df_d.columns)
for i, k in enumerate(df_d.stat):
    if k == 'ordered':
        for column in df_d .columns[-(ln-3):]:
            if df_d.loc[i].at[column] == 1:
                if df_d.columns.get_loc(column) + 3 <= ln:
                    df_d.iloc[i,[df_d.columns.get_loc(column)+2]] = [100]
df_d

结果如下(但尚未完成):

代码语言:javascript
复制
    id  stat           date     1990    2021    2022    2023    2024    2025    2026    2027
0   1   ordered        2021       0       1       1       100    100      1       1      100
1   2   unconfirmed    2022       0       0       2       2       2       2       2       2
2   3   ordered        2023       0       0       0       1       1      100     100      1
3   4   unknwon        2024       0       0       0       0       3       3       3       3
4   5   ordered        2025       0       0       0       0       0       1       1      100
5   6   unconfirmed    2026       0       0       0       0       0       0       0       0
6   7   ordered        2021       0       1       1       1       1       1       1       1
7   8   back           1990       0       0       0       0       0       0       0       0  

我希望更改所有已经“订购”了stat和循环的列的行,跳过前两个值,并将该行中的所有其他值设置为100。但是我不知道如何避免跳过这一步,因为它允许后面的一些列不做任何更改。完成此操作后,我希望在不同的步骤中将最后2列的所有值设置为1。任何关于修复这个循环问题的想法都会非常感谢。

预期产出:

代码语言:javascript
复制
    id  stat           date     1990    2021    2022    2023    2024    2025    2026    2027
0   1   ordered        2021       0       1       1       100    100    100     100      100
1   2   unconfirmed    2022       0       0       2       2       2       2       2       2
2   3   ordered        2023       0       0       0       1       1      100     100      100
3   4   unknwon        2024       0       0       0       0       3       3       3       3
4   5   ordered        2025       0       0       0       0       0       1       1      100
5   6   unconfirmed    2026       0       0       0       0       0       0       0       0
6   7   ordered        2021       0       1       1      100     100     100     100     100
7   8   back           1990       0       0       0       0       0       0       0       0 
EN

回答 1

Stack Overflow用户

发布于 2022-04-20 11:41:13

在加入之前,您可以使用numpynumpy.triu计算2D掩码,并使用它设置100个值:

代码语言:javascript
复制
df2 = pd.get_dummies(df_data.date).cumsum(axis=1).mul(lis, axis=0).astype(int)

skip = 2 # number of columns to skip
# mask for upper triangle (above +2 diagonal)
m1 = np.triu(np.full(df2.shape, True), k=skip+1)
# mask for rows corresponding to ordered
m2 = df_data[['stat']].eq('ordered').to_numpy()
df2[m1&m2] = 100   # the two masks are combined by broadcasting

df_d = df_data.join(df2)

产出:

代码语言:javascript
复制
   id         stat  date  1990  2021  2022  2023  2024  2025  2026  2027
0   1      ordered  2021     0     1     1   100   100   100   100   100
1   2  unconfirmed  2022     0     0     2     2     2     2     2     2
2   3      ordered  2023     0     0     0     1     1   100   100   100
3   4      unknwon  2024     0     0     0     0     3     3     3     3
4   5      ordered  2025     0     0     0     0     0     1     1   100
5   6  unconfirmed  2026     0     0     0     0     0     0     0     0
6   7      ordered  2027     0     0     0     0     0     0     0     0
7   8         back  1990     0     0     0     0     0     0     0     0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71938429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档