首页 > 解决方案 > 将 pandas 中的行相乘并添加到迭代中

问题描述

考虑以下数据框,

df = pd.DataFrame({'ID' : [1,2,3,4,5], 'Week' : ['WK1', 'WK2', 'WK3', 'WK4', 'WK5']})
print(df)
        ID  Week
0   1   WK1
1   2   WK2
2   3   WK3
3   4   WK4
4   5   WK5

什么是最Pythonic的方式来循环和复制每一行,同时将+1添加到周数,

所以基于前两个值,这将是我想要的结果。

   ID   Week
0   1   WK1
1   1   WK2
2   1   WK3
3   1   WK4
4   1   WK5
5   2   WK1
6   2   WK2
7   2   WK3
8   2   WK4
9   2   WK5

标签: pythonpandas

解决方案


那是笛卡尔积。使用理解并重建你的DataFrame

pd.DataFrame([(i, w) for i in df.ID for w in df.Week], columns=df.columns)

    ID Week
0    1  WK1
1    1  WK2
2    1  WK3
3    1  WK4
4    1  WK5
5    2  WK1
6    2  WK2
7    2  WK3
8    2  WK4
9    2  WK5
10   3  WK1
11   3  WK2
12   3  WK3
13   3  WK4
14   3  WK5
15   4  WK1
16   4  WK2
17   4  WK3
18   4  WK4
19   4  WK5
20   5  WK1
21   5  WK2
22   5  WK3
23   5  WK4
24   5  WK5

如同

# empty list
a = []

for i in df.ID:
    for w in df.Week:
        a.append((i, w))

pd.DataFrame(a, columns=df.columns)

推荐阅读