如何使用for循环添加多个不同的DataFrame?
How to add multiple different DataFrame using for loop?
我有多个数据框,我想在前一个数据框的第 3 个值之后添加下一个数据框的值。
我是 pyhton 的新手,我正在使用 google colab,所以我希望你能帮助我。非常感谢。所以下面是我想怎么做的一个例子。
df1:
Index Column_1
0 1
1 1
2 1
3 1
4 1
5 1
df2:
Index Column_2
0 2
1 2
2 2
3 2
4 2
5 2
df3:
Index Column_3
0 3
1 3
2 3
3 3
4 3
5 3
我想从 df1 的索引 3 开始添加 df2 的值。
我还想从 df2 的索引 6 开始添加 df3 的值。
所以基本上索引随着数据帧的增加而加倍。
所以 df1 + df2 + df3 应该看起来是这样的:
df4:
Index Column_1 Column_2 Column_3
0 1
1 1
2 1
3 1 3
4 1 3
5 1 3
6 2 5
7 2 5
8 2 5
9 3
10 3
11 3
或
df4
Index Column_4
0 1
1 1
2 1
3 3
4 3
5 3
6 5
7 5
8 5
9 3
10 3
11 3
有没有办法在循环中执行此操作?
希望大家能帮帮我。非常感谢。
使用pd.merge
df = df1.merge(df2.assign(Index=df2['Index']+3), how='outer') \
.merge(df3.assign(Index=df3['Index']+6), how='outer')
df['Column_2'] += df['Column_1'].fillna(0)
df['Column_3'] += df['Column_2'].fillna(0)
>>> df
Index Column_1 Column_2 Column_3
0 0 1.0 NaN NaN
1 1 1.0 NaN NaN
2 2 1.0 NaN NaN
3 3 1.0 3.0 NaN
4 4 1.0 3.0 NaN
5 5 1.0 3.0 NaN
6 6 NaN 2.0 5.0
7 7 NaN 2.0 5.0
8 8 NaN 2.0 5.0
9 9 NaN NaN 3.0
10 10 NaN NaN 3.0
11 11 NaN NaN 3.0
更新
Is there a way I can render the result in one column only?
df['Column_4'] = df.ffill(axis=1)['Column_3']
>>> df
Index Column_1 Column_2 Column_3 Column_4
0 0 1.0 NaN NaN 1.0
1 1 1.0 NaN NaN 1.0
2 2 1.0 NaN NaN 1.0
3 3 1.0 3.0 NaN 3.0
4 4 1.0 3.0 NaN 3.0
5 5 1.0 3.0 NaN 3.0
6 6 NaN 2.0 5.0 5.0
7 7 NaN 2.0 5.0 5.0
8 8 NaN 2.0 5.0 5.0
9 9 NaN NaN 3.0 3.0
10 10 NaN NaN 3.0 3.0
11 11 NaN NaN 3.0 3.0
我有多个数据框,我想在前一个数据框的第 3 个值之后添加下一个数据框的值。
我是 pyhton 的新手,我正在使用 google colab,所以我希望你能帮助我。非常感谢。所以下面是我想怎么做的一个例子。
df1:
Index Column_1
0 1
1 1
2 1
3 1
4 1
5 1
df2:
Index Column_2
0 2
1 2
2 2
3 2
4 2
5 2
df3:
Index Column_3
0 3
1 3
2 3
3 3
4 3
5 3
我想从 df1 的索引 3 开始添加 df2 的值。 我还想从 df2 的索引 6 开始添加 df3 的值。 所以基本上索引随着数据帧的增加而加倍。
所以 df1 + df2 + df3 应该看起来是这样的:
df4:
Index Column_1 Column_2 Column_3
0 1
1 1
2 1
3 1 3
4 1 3
5 1 3
6 2 5
7 2 5
8 2 5
9 3
10 3
11 3
或
df4
Index Column_4
0 1
1 1
2 1
3 3
4 3
5 3
6 5
7 5
8 5
9 3
10 3
11 3
有没有办法在循环中执行此操作?
希望大家能帮帮我。非常感谢。
使用pd.merge
df = df1.merge(df2.assign(Index=df2['Index']+3), how='outer') \
.merge(df3.assign(Index=df3['Index']+6), how='outer')
df['Column_2'] += df['Column_1'].fillna(0)
df['Column_3'] += df['Column_2'].fillna(0)
>>> df
Index Column_1 Column_2 Column_3
0 0 1.0 NaN NaN
1 1 1.0 NaN NaN
2 2 1.0 NaN NaN
3 3 1.0 3.0 NaN
4 4 1.0 3.0 NaN
5 5 1.0 3.0 NaN
6 6 NaN 2.0 5.0
7 7 NaN 2.0 5.0
8 8 NaN 2.0 5.0
9 9 NaN NaN 3.0
10 10 NaN NaN 3.0
11 11 NaN NaN 3.0
更新
Is there a way I can render the result in one column only?
df['Column_4'] = df.ffill(axis=1)['Column_3']
>>> df
Index Column_1 Column_2 Column_3 Column_4
0 0 1.0 NaN NaN 1.0
1 1 1.0 NaN NaN 1.0
2 2 1.0 NaN NaN 1.0
3 3 1.0 3.0 NaN 3.0
4 4 1.0 3.0 NaN 3.0
5 5 1.0 3.0 NaN 3.0
6 6 NaN 2.0 5.0 5.0
7 7 NaN 2.0 5.0 5.0
8 8 NaN 2.0 5.0 5.0
9 9 NaN NaN 3.0 3.0
10 10 NaN NaN 3.0 3.0
11 11 NaN NaN 3.0 3.0