当满足某一条件时,我想从相同的数据中复制数据。Dataframe:
Hour,Wage
1,15
2,17
4,20
10,25
15,26
16,30
17,40
19,15在进行循环时,我希望复制数据帧,而row.hour中的差异大于4。
预期产出:
Hour,Wage
1,15
2,17
4,20
10,25
15,26
16,30
17,40
19,15
2,17
4,20当迭代遍历所有行时,我想复制行,并且在row.hour row.hour =1 row.hour1 =2中存在大于4的差异。这里的差异是1,但在(row.hour2=4和行,hour3=10).here中,差大于4。我想在满足这个条件(大于4)的情况下复制索引上面的数据,我可以用**df = pd.concat([df]*2, ignore_index=False)**.but复制数据--当我用if语句运行它时,它不会复制。
我尝试了下面的代码,但什么也没发生。
**for i in range(0,len(df)-1):
if (df.iloc[i,0] - df.iloc[i+1,0]) > 4 :
df = pd.concat([df]*2, ignore_index=False)**发布于 2021-01-09 21:30:53
我的理解是:您希望比较连续两行的“小时”值。如果差异大于4,则希望将前一行添加到DF中。如果这就是你想要的,试试这个:
创建一个DF:
j = pd.DataFrame({'Hour':[1, 2, 4,10,15,16,17,19],
'Wage':[15,17,20,25,26,30,40,15]})定义一个函数:
def f1(d):
dn = d.copy()
for x in range(len(d)-2):
if (abs(d.iloc[x+1].Hour - d.iloc[x+2].Hour) > 4):
idx = x + 0.5
dn.loc[idx] = d.iloc[x]['Hour'], d.iloc[x]['Wage']
dn = dn.sort_index().reset_index(drop=True)
return dn调用传递DF的函数:
nd = f1(j)
Hour Wage
0 1 15
1 2 17
2 2 17
3 4 20
4 4 20
5 10 25
6 15 26
7 16 30
8 17 40
9 19 15发布于 2021-01-09 20:38:40
排成一行
if df.iloc[i,0] - df.iloc[i+1,0] > 4计算4-10而不是10-4,所以检查-6 > 4而不是6 > 4
你必须更换物品
if df.iloc[i+1,0] - df.iloc[i,0] > 4或者使用abs(),如果您想在这两种情况下进行复制-- > 4和< -4
if abs(df.iloc[i+1,0] - df.iloc[i,0]) > 4如果您使用print( df.iloc[i,0] - df.iloc[i+1,0]) (或调试器),您将看到它。
https://stackoverflow.com/questions/65646732
复制相似问题