Python 如何根据条件在数据帧中添加新行?
我有一个从文件填充的数据框。 第一列总是相同的值,第二列是基于尺寸的(我从Cam文件中获得了这些值),第三列是由else if条件创建的Python 如何根据条件在数据帧中添加新行?,python,pandas,dataframe,numpy,Python,Pandas,Dataframe,Numpy,我有一个从文件填充的数据框。 第一列总是相同的值,第二列是基于尺寸的(我从Cam文件中获得了这些值),第三列是由else if条件创建的 [1] [2] [3] 1 30 2 1 30 1 1 30 3 1 90 3 1 370 3 1 430 3 1 705 3 1 805 3 1 880 2 1 905 3 1 1005 3 1 1170 3
[1] [2] [3]
1 30 2
1 30 1
1 30 3
1 90 3
1 370 3
1 430 3
1 705 3
1 805 3
1 880 2
1 905 3
1 1005 3
1 1170 3
1 1230 3
1 1970 3
1 2030 3
1 2970 3
1 3030 3
1 3970 3
1 4030 3
1 4423 3
1 4539 3
1 4575 3
1 4630 2
1 4635 3
1 4671 3
1 4787 3
1 4957 3
1 5057 3
1 5270 3
1 5330 3
1 5970 3
1 6030 3
1 6970 3
1 7030 3
1 7970 3
1 8030 3
1 8158 3
1 8257 3
1 8332 2
1 8357 3
1 8457 3
1 8970 3
1 9030 3
1 9970 3
1 10030 3
1 10970 3
1 11030 3
1 11470 3
1 11530 3
1 11853 3
1 11953 3
现在我需要在计算中创建一个新行。我需要迭代每一行,找到一个大于100的值,然后添加一个像这样的新行。。
以第4行和第5行为例:
1 90 3
1 370 3
370 - 90 = 260 (260 is greater than 100)
所以我需要添加一个新行,最后一个数字+100,最后一列必须为零:
1 90 3
1 190 0
1 370 3
有什么办法可以做到吗?
提前谢谢
编辑:我只需要在数据框中添加一次行。尝试:
m = df["[2]"].diff() > 100
df.loc[m, "[2]"] = pd.Series(
[
[str(df.iloc[v - 1]["[2]"] + 100), df.iloc[v]["[2]"]]
for v in df.index[m]
],
index=df.index[m],
)
df = df.explode("[2]")
df["[3]"] = np.where(
df["[2]"].apply(lambda x: isinstance(x, str)), 0, df["[3]"]
)
df["[2]"] = df["[2]"].astype(int)
print(df)
印刷品:
[1][2][3]
0 1 30 2
1 1 30 1
2 1 30 3
3 1 90 3
4 1 190 0
4 1 370 3
5 1 430 3
6 1 530 0
6 1 705 3
7 1 805 3
8 1 880 2
9 1 905 3
10 1 1005 3
11 1 1105 0
11 1 1170 3
12 1 1230 3
13 1 1330 0
13 1 1970 3
14 1 2030 3
15 1 2130 0
15 1 2970 3
16 1 3030 3
17 1 3130 0
17 1 3970 3
18 1 4030 3
19 1 4130 0
19 1 4423 3
20 1 4523 0
20 1 4539 3
21 1 4575 3
22 1 4630 2
23 1 4635 3
24 1 4671 3
25 1 4771 0
25 1 4787 3
26 1 4887 0
26 1 4957 3
27 1 5057 3
28 1 5157 0
28 1 5270 3
29 1 5330 3
30 1 5430 0
30 1 5970 3
31 1 6030 3
32 1 6130 0
32 1 6970 3
33 1 7030 3
34 1 7130 0
34 1 7970 3
35 1 8030 3
36 1 8130 0
36 1 8158 3
37 1 8257 3
38 1 8332 2
39 1 8357 3
40 1 8457 3
41 1 8557 0
41 1 8970 3
42 1 9030 3
43 1 9130 0
43 1 9970 3
44 1 10030 3
45 1 10130 0
45 1 10970 3
46 1 11030 3
47 1 11130 0
47 1 11470 3
48 1 11530 3
49 1 11630 0
49 1 11853 3
50 1 11953 3
编辑:仅更改一个值:
mask = df["[2]"].diff() > 100
if True in mask:
m = [False] * len(df)
m[mask.idxmax()] = True
df.loc[m, "[2]"] = pd.Series(
[
[str(df.iloc[v - 1]["[2]"] + 100), df.iloc[v]["[2]"]]
for v in df.index[m]
],
index=df.index[m],
)
df = df.explode("[2]")
df["[3]"] = np.where(
df["[2]"].apply(lambda x: isinstance(x, str)), 0, df["[3]"]
)
df["[2]"] = df["[2]"].astype(int)
print(df)
你需要滚动还是超前滞后比较?不,我只需要在数据框中插入那一行。欢迎使用stackoverflow。我们可以帮助您解决代码中的问题,但我们不是为您编写的。请回答您的问题并添加您尝试过的代码。当你运行它时会发生什么?你以为会发生什么?有错误吗?另请参见。我忘了提及,我只需要在数据框中添加一行即可。@rafazamp请查看我的编辑。谢谢,为我工作!