pandas 条件正向填充

ymdaylpp  于 2023-03-16  发布在  其他
关注(0)|答案(3)|浏览(116)

| 数据1|数据2|数据3|数据4|
| - ------|- ------|- ------|- ------|
| 八十八|二十二|四十四|1个|
| 楠|楠|楠|五个|
| 五一七|楠|楠|楠|
| 楠|楠|楠|楠|
| 楠|-33岁|楠|楠|
| 楠|楠|八个|楠|
| 楠|楠|楠|无|
我有上面的 Dataframe df我正在执行向前填充,但是如果data 4 ==5,我想删除所有行,直到data 4的值改变,如果我填充并过滤掉data 4!=5,那么我最终会在data 4 ==0的行中得到像517这样的值,这是我不想要的。下面的代码将删除包含5的行,但如果另一列包含值而data 4为5,则不会删除

filtereddf = df[df.data4 !=5]

我希望结果是:
| 数据1|数据2|数据3|数据4|
| - ------|- ------|- ------|- ------|
| 八十八|二十二|四十四|1个|
| 八十八|二十二|四十四|无|

t1rydlwq

t1rydlwq1#

你可以试试

# Just forward fill the column you want to filter
df['data4'] = df.data4.ffill()

# Filter by column
df = df.loc[df.data4 != 5]

# Fill all the columns
df.ffill()

产出

data1  data2  data3  data4
0   88.0   22.0   44.0    1.0
6   88.0   22.0   44.0    0.0
qc6wkl3g

qc6wkl3g2#

尝试先填充data4,然后删除data4为5的行:

df['data4'] = df['data4'].ffill()
df.loc[df['data4'] != 5].ffill()
lc8prwob

lc8prwob3#

您可以先填充特定的列数据4。

df['data4'] = df['data4'].ffill()

| | 数据1|数据2|数据3|数据4|
| - ------|- ------|- ------|- ------|- ------|
| 无|八十八岁|二十二岁|四十四岁|1.0分|
| 1个|钠氮|钠氮|钠氮|5.0版|
| 第二章|小行星517.0|钠氮|钠氮|5.0版|
| 三个|钠氮|钠氮|钠氮|5.0版|
| 四个|钠氮|-33.0|钠氮|5.0版|
| 五个|钠氮|钠氮|8.0分|5.0版|
| 六个|钠氮|钠氮|钠氮|0.0分|
筛选data 4不为5的地方,然后填充所有列。

filtereddf = df[df['data4'] != 5]
filtereddf.ffill()

| | 数据1|数据2|数据3|数据4|
| - ------|- ------|- ------|- ------|- ------|
| 无|八十八岁|二十二岁|四十四岁|1.0分|
| 六个|八十八岁|二十二岁|四十四岁|0.0分|

相关问题