gpt4 book ai didi

python - 通过采样其他列的位来创建新列

转载 作者:太空狗 更新时间:2023-10-30 01:24:44 24 4
gpt4 key购买 nike

考虑包含 N 列的数据框,如下所示。每个条目都是一个 8 位整数。

|---------------------|------------------|---------------------|
| Column 1 | Column 2 | Column N |
|---------------------|------------------|---------------------|
| 4 | 8 | 13 |
|---------------------|------------------|---------------------|
| 0 | 32 | 16 |
|---------------------|------------------|---------------------|

我想通过从剩余列中随机抽取每一位数据来创建一个新列,每行包含 8 位条目。因此,生成的数据框如下所示:

|---------------------|------------------|---------------------|---------------|
| Column 1 | Column 2 | Column N | Sampled |
|---------------------|------------------|---------------------|---------------|
| 4 = (100) | 8 = (1000) | 13 = (1101) | 5 = (0101) |
|---------------------|------------------|---------------------|---------------|
| 0 = (0) | 32 = (100000) | 16 = (10000) | 48 = (110000) |
|---------------------|------------------|---------------------|---------------|

“采样”列中的第一个条目是通过在同一位置的所有可能位中选择一个位而创建的。例如,第一个条目中的 LSB=1 选自 {0(LSB 来自 col 1)、0(LSB 来自 col 2)、1(LSB 来自 col N)},依此类推.

这类似于 this question但不是对每个条目进行采样,而是需要对每个位进行采样。

考虑到数据框有大量的行和列,实现这一点的有效方法是什么?从类似的问题,我假设我们需要一个 lookup + sample 来选择条目和另一个 sample 来选择位?

最佳答案

执行示例时的逻辑与之前相同,但在这里我使用 unnesting 在二进制和十进制之间进行了两次转换。 , 然后加入结果

df1=df.applymap(lambda x : list('{0:08b}'.format(x)))

df1=unnesting(df1,df1.columns.tolist())
s=np.random.randint(0, df1.shape[1], df1.shape[0])

yourcol=pd.Series(df1.values[np.arange(len(df1)),s]).groupby(df1.index).apply(''.join)

df['Sampled']=yourcol.map(lambda x : int(x,2))

df
Out[268]:
c1 c2 cn Sampled
0 4 8 13 12
1 0 32 16 16

def unnesting(df, explode):
idx = df.index.repeat(df[explode[0]].str.len())
df1 = pd.concat([
pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
df1.index = idx

return df1.join(df.drop(explode, 1), how='left')

关于python - 通过采样其他列的位来创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55637638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com