问题
I have below dataframe df but some D4s with True was causing an issue in my custom ordering. Temporarily, I stored such rows in a list and turned those D4 values to False intentionally and sorted with my custom ordering.
Index D1 D2 D3 D4 D5
0 8 5 0 False True
1 45 35 0 True False
2 35 10 1 False True
3 40 5 0 True False
4 12 10 5 False False
5 18 15 13 False True
6 25 15 5 True False
7 35 10 11 False True
8 95 50 0 False False
hacked_rows = []
def hack_d4(row):
if row['D3'] in [0, 1]:
row['D4'] = False
hacked_rows.append(row)
return row
df = df.apply(lambda x: hack_d4(x), axis=1)
ordered_df = order_df(df)
Ordered df with custom ordering, It does not change the df rows but has few new columns and the row has all the previous columns as is, only order has changed a bit.
Now I am done with custom ordering. Now I want to revert hacked_rows back to the original dataframe which are there on the list. but not sure how to replace them back.
I tried below code for one row, but no luck, its throwing TypeError:
item = hacked_rows[0]
item = item.drop('D3')
ordered_df.loc[item] # But this line is throwing error.
@cs95 - Your answerhelped me a little, but it did not completely solve the problem. The tricky point is how to update back hacked_rows to the ordered_df without hampering the ordering. Can you help in there?
Note- I am okay if anyone can suggest a different approach to replace the True values temporarily.
来源:https://stackoverflow.com/questions/62593478/find-a-series-in-dataframe-and-replace-it-with-original-row