gpt4 book ai didi

python - 如何通过单位矩阵屏蔽groupby数据帧

转载 作者:行者123 更新时间:2023-12-01 07:58:09 24 4
gpt4 key购买 nike

我想通过单位矩阵屏蔽具有 groupby 索引的数据帧。

数据框:

s = pd.Series([0, 1, 1, 2, 2, 2])
df = DataFrame([{'B1': '1A', 'B2': '', 'B3': '', 'U_B1': 'A', 'U_B2': '', 'U_B3': ''},
{'B1': '3A', 'B2': '1A', 'B3': '', 'U_B1': 'A', 'U_B2': 'A', 'U_B3': ''},
{'B1': '3A', 'B2': '1A', 'B3': '', 'U_B1': 'A', 'U_B2': 'A', 'U_B3': ''},
{'B1': '41A', 'B2': '28A', 'B3': '3A', 'U_B1': 'A', 'U_B2': 'A', 'U_B3': 'A'},
{'B1': '41A', 'B2': '28A', 'B3': '3A', 'U_B1': 'A', 'U_B2': 'A', 'U_B3': 'A'},
{'B1': '41A', 'B2': '28A', 'B3': '3A', 'U_B1': 'A', 'U_B2': 'A', 'U_B3': 'A'}])

df.set_index(s)

B1 B2 B3 U_B1 U_B2 U_B3
0 1A A
1 3A 1A A A
1 3A 1A A A
2 41A 28A 3A A A A
2 41A 28A 3A A A A
2 41A 28A 3A A A A

目标:

    B1   B2   B3 U_B1 U_B2 U_B3
0 1A A
1 3A 1A A
1 3A 1A A
2 41A 28A 3A A
2 41A 28A 3A A
2 41A 28A 3A A

如下面的代码所示,现在似乎我在删除组中的“”值时遇到了一些问题。

df[['U_B1','U_B2','U_B3']] = df.groupby(df1.index)['U_B1','U_B2','U_B3'].apply(lambda x: x.drop(x == '')).mask(np.identity(len(x))==0)

并出现错误:ValueError:石斑鱼和轴的长度必须相同

我该如何处理?

如果还有其他方法也能达到目标。

<小时/>

问题更新:

数据框:

df = DataFrame([{'B1': '1A', 'B2': '', 'B3': '', 'U_B1': 'A', 'U_B2': '', 'U_B3': ''},
{'B1': '3A', 'B2': '1A', 'B3': '', 'U_B1': 'A', 'U_B2': 'A', 'U_B3': ''},
{'B1': '41A', 'B2': '28A', 'B3': '3A', 'U_B1': 'A', 'U_B2': 'A', 'U_B3': 'A'}])

# Duplicate rows
val = (df[['U_B1','U_B2','U_B3']] != '').sum(axis=1)
df1 = df.loc[np.repeat(val.index,val)]
df1.index.names = ['index']
df1

B1 B2 B3 U_B1 U_B2 U_B3
index
0 1A A
1 3A 1A A A
1 3A 1A A A
2 41A 28A 3A A A A
2 41A 28A 3A A A A
2 41A 28A 3A A A A

最佳答案

您可以使用自定义函数,按长度过滤列,按掩码过滤相同大小,按 DataFrame.where 过滤并通过 DataFrame.reindex 添加删除的列每组:

df1 = df.set_index(s)

def f(x):
a = x.iloc[:, :len(x)]
m = np.identity(len(x)).astype(bool)
return a.where(m,'').reindex(x.columns, axis=1, fill_value='')

df1[['U_B1','U_B2','U_B3']] = (df1.groupby(df1.index)['U_B1','U_B2','U_B3'].apply(f)
.reset_index(level=0, drop=True))
print (df1)
B1 B2 B3 U_B1 U_B2 U_B3
0 1A A
1 3A 1A A
1 3A 1A A
2 41A 28A 3A A
2 41A 28A 3A A
2 41A 28A 3A A

关于python - 如何通过单位矩阵屏蔽groupby数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55847803/

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