如何使用相应列中单元格的相应频率更改 Pandas 数据框中的单元格

数据挖掘 Python 熊猫
2022-02-23 12:08:21

我有一个带有二进制值列的熊猫数据框。我想用相应列中的频率替换每个单元格中的值。我的问题是如何在对列子集使用应用时跟踪当前列,如下所示:(从第 8 列应用到末尾):

train_data.ix[:,8:] = train_data.ix[:,8:].apply(x: what should come here?)

我知道这train_data.ix[:,col_number].value_counts()[0]将在 col_number 中返回零的数量,但我如何在 apply 函数中使用它?

1个回答
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(2,size=(10, 4)), columns=list('ABCD'))
df


    A   B   C   D
0   0   1   1   1
1   1   0   1   0
2   1   0   0   1
3   0   1   1   1
4   0   0   1   1
5   0   1   1   1
6   0   0   0   0
7   1   1   1   0
8   1   1   1   0
9   1   0   1   0

values = df.apply(pd.value_counts)
values

    A   B   C   D
0   5   5   2   5
1   5   5   8   5

new_df = pd.DataFrame()
for x in df.columns:
    new_df[x] = df[x].apply(lambda row: values[x][row])
new_df


    A   B   C   D
0   5   5   8   5
1   5   5   8   5
2   5   5   2   5
3   5   5   8   5
4   5   5   8   5
5   5   5   8   5
6   5   5   2   5
7   5   5   8   5
8   5   5   8   5
9   5   5   8   5

我用随机整数 0 和 1 创建了一个 df。

然后在值 df 中按列计算它们。

然后遍历每一列并用它们各自的计数替换每个单元格。随机它接近 5/5 拆分,但您可以看到 C 列有 8/2 拆分。