gpt4 book ai didi

python - Pandas :插入不循环的行

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:53 25 4
gpt4 key购买 nike

我已经看到了一些“在 pandas 数据框中插入行”的答案,但它们通常假设单行插入,或者与我正在寻找的内容略有不同。

我希望根据条件多次将另一个数据帧中的一行插入到 df 中。

以下代码“有效”,因为它为我提供了我正在寻找的内容,但我想知道这是否可以在没有 for 循环的情况下完成。

df = pd.DataFrame({
'a':[1,2,3,2,3,1,1,2,1,2,3,3,1,3],
'b':[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
})

df2 = pd.DataFrame(columns = df.columns)

row_fill = pd.DataFrame({'a':[100],'b':[200]})

for i in df.index:
if df['a'][i] == 2:
df2 = df2.append(row_fill)

df2 = df2.append(df.loc[i])

df2.reset_index(inplace = True, drop = True)
df = df2

感谢任何帮助。

最佳答案

我会这样做:

来源 DF:

In [153]: df
Out[153]:
a b
0 1 0
1 2 0
2 3 0
3 2 0
4 3 0
5 1 0
6 1 0
7 2 0
8 1 0
9 2 0
10 3 0
11 3 0
12 1 0
13 3 0

解决方案:

In [154]: idx = np.argwhere(df.a == 2) # Pandas alternative: idx = df.index[df.a == 2]

In [155]: new = pd.concat([row_fill] * len(idx)).set_index(idx-1)

In [156]: new
Out[156]:
a b
0 100 200
2 100 200
6 100 200
8 100 200

使用 DataFrame 构造函数可以实现相同的效果:

new = pd.DataFrame(row_fill.values.tolist() * len(idx), 
columns=row_fill.columns, index=idx-1)

现在我们可以连接dfnew,对生成的DF中的索引进行排序并重置索引:

In [157]: res = pd.concat([df, new]).sort_index().reset_index(drop=True)

In [158]: res
Out[158]:
a b
0 1 0
1 100 200
2 2 0
3 3 0
4 100 200
5 2 0
6 3 0
7 1 0
8 1 0
9 100 200
10 2 0
11 1 0
12 100 200
13 2 0
14 3 0
15 3 0
16 1 0
17 3 0

关于python - Pandas :插入不循环的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088595/

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