gpt4 book ai didi

python - 如何通过 Pandas 或 Spark 数据框删除所有行中具有相同值的列?

转载 作者:IT老高 更新时间:2023-10-28 20:33:16 25 4
gpt4 key购买 nike

假设我有类似以下的数据:

  index id   name  value  value2  value3  data1  val5
0 345 name1 1 99 23 3 66
1 12 name2 1 99 23 2 66
5 2 name6 1 99 23 7 66

我们如何在一个命令中删除所有行具有相同值的所有列,例如 (value, value2, value3)还是使用 python 的几个命令?

假设我们有许多列类似于 valuevalue2value3...value200

输出:

   index    id  name   data1
0 345 name1 3
1 12 name2 2
5 2 name6 7

最佳答案

我们可以做的是使用 nunique 计算数据框每一列中唯一值的数量,并删除只有一个唯一值的列:

In [285]:
nunique = df.nunique()
cols_to_drop = nunique[nunique == 1].index
df.drop(cols_to_drop, axis=1)

Out[285]:
index id name data1
0 0 345 name1 3
1 1 12 name2 2
2 5 2 name6 7

另一种方法是只 diff 数字列,获取 abs 值和 sums 它们:

In [298]:
cols = df.select_dtypes([np.number]).columns
diff = df[cols].diff().abs().sum()
df.drop(diff[diff== 0].index, axis=1)

Out[298]:
index id name data1
0 0 345 name1 3
1 1 12 name2 2
2 5 2 name6 7

另一种方法是使用具有相同值的列的标准差为零的属性:

In [300]:
cols = df.select_dtypes([np.number]).columns
std = df[cols].std()
cols_to_drop = std[std==0].index
df.drop(cols_to_drop, axis=1)

Out[300]:
index id name data1
0 0 345 name1 3
1 1 12 name2 2
2 5 2 name6 7

其实以上都可以单行完成:

In [306]:
df.drop(df.std()[(df.std() == 0)].index, axis=1)

Out[306]:
index id name data1
0 0 345 name1 3
1 1 12 name2 2
2 5 2 name6 7

关于python - 如何通过 Pandas 或 Spark 数据框删除所有行中具有相同值的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39658574/

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