基于单行输入继续for循环

2024-09-28 05:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相当大的数据框,包含“已知”和“未知”的数据。我正在尝试创建一个for循环(或另一个解决方案),它遍历特定的dataframe列,并在每次找到“已知”值时填充一个值。一旦找到该值,循环就必须填充该值,直到找到下一个已知值。在这个新的已知值被发现后,循环将填充这个新的已知值等。我不能删除未知数据

我目前拥有的for循环能够将已知值附加到其所在的行中,但我不知道如何填充该值,直到下一个已知值并重复此步骤

import pandas as pd
example = [{'A':"Value_01"}, {'A':"unknown_x"}, {'A':"Value_02"}, {'A':"random_y"}, {'A':"dontknow_1"}, {'A':"random_x"}, {'A':"Value_03"}, {'A':"dontknow_2"}, {'A':"dontknow_3"}]
df = pd.DataFrame(example)

values = []
for row in df['A']:
    if "Value_01" in row:
        values.append("Value_01")
    elif "Value_02" in row:
        values.append("Value_02")
    elif "Value_03" in row:
        values.append("Value_03")

示例和所需输出:

df                       
Input                   Desired
-------                 --------
Value_01                Value_01
unknown                 Value_01
Value_02                Value_02
unknown                 Value_02
unknown                 Value_02
unknown                 Value_02
Value_03                Value_03
unknown                 Value_03
unknown                 Value_03

因为我在不同的软件程序中使用这段python代码,所以我只能使用本机python和以下软件包:matplotlib、numpy、pandas、sciket learn、scipy、seaborn和statsmodels。任何帮助都将不胜感激


Tags: 数据inpandasdfforvalueexamplerandom
1条回答
网友
1楼 · 发布于 2024-09-28 05:22:14

我认为你不需要使用循环。您可以使用合并熊猫的方法。在你提到的情况下,你可以做到以下几点

可以使用^{}+^{}将未知值填充为^{}

new_df=df.where(df['A'].str.contains('Value')).ffill()
print(new_df)

输出:

          A
0  Value_01
1  Value_01
2  Value_02
3  Value_02
4  Value_02
5  Value_02
6  Value_03
7  Value_03
8  Value_03

您还可以使用DataFrame.mask

df.mask(~df['A'].str.contains('Value')).ffill()

如果你有一个已知值的列表​​您可以使用^{}作为@splash58的建议

new_df=df.where(df['A'].isin(['Value_01','Value_02', 'Value_03'])).ffill()

相关问题 更多 >

    热门问题