【发布时间】:2020-12-18 17:32:09
【问题描述】:
假设我有一个 DataFrame,其中一列是“类别”,并且有 3 个类别:
- cat_a 有 100 条记录
- cat_b 有 5 条记录
- cat_c 有 1000 条记录
我想编写一个函数来清理该 Dataframe。更具体地说,我想提供一个带有键、值的字典来告诉函数要清理哪些类别以及如何清理。假设我用这本字典提供函数:
categorysize = {"cat_b": 0,
"cat_c": 100}
我的目标是:
- 我想完全删除“cat_b”,这就是我设置 value=0 的原因
- 我想将“cat_c”从 1000 条记录随机下采样到 100 条
我写了这个函数,但它不起作用。在所有情况下,我只设法删除一个类别或对另一个类别进行下采样。但不是两者都有:(
def df_reshaper(DF, categorysize):
# I create a empty dataframe to write my data to
X = pd.DataFrame()
for key, value in categorysize.items():
# If a key in "categorysize" has a value of 0 then drop that category from the data
if value==0:
DF = DF.loc[DF.category!=key, :]
X = X.append(DF)
return X
# If a key in "categorysize" has a value > 0 then take a sample the size of value
elif value>0:
# First take a sample of x values for later
DF2 = DF.loc[DF.category==key, : ].sample(value)
# Then drop that category completely from the Dataframe
DF3 = DF.loc[DF.category!=key]
# Then add the sample from step x to the new dataframe
DF4 = DF2.append(DF3)
X = X.append(DF4)
return X
return X
生成的 DF 应该有 100 条 cat_a 记录和 100 条 cat_c 记录
【问题讨论】:
标签: python function dataframe loops