小编Pet*_*uke的帖子

删除pandas.Dataframe中重复列的快速方法

所以通过使用

df_ab = pd.concat([df_a, df_b], axis=1, join='inner')
Run Code Online (Sandbox Code Playgroud)

我得到一个这样的Dataframe:

    A    A    B    B
0   5    5   10   10
1   6    6   19   19
Run Code Online (Sandbox Code Playgroud)

我想删除它的多个列:

    A     B
0   5    10
1   6    19
Run Code Online (Sandbox Code Playgroud)

因为df_a和df_b是同一个Dataframe的子集,所以我知道如果列名相同,所有行都具有相同的值.我有一个有效的解决方案:

df_ab = df_ab.T.drop_duplicates().T
Run Code Online (Sandbox Code Playgroud)

但是我有很多行,所以这个很慢.有人有更快的解决方案吗?我更喜欢一种不需要明确知道列名的解决方案.

python pandas

6
推荐指数
4
解决办法
1万
查看次数

在groupby之后将Spark DataFrame的行聚合到String

我是Spark和Scale的新手,可能真的需要一个提示来解决我的问题.所以我有两个DataFrames A(列id和名称)和B(列id和文本)想要加入它们,按ID分组并将所有文本行组合成一个字符串:

一个

+--------+--------+
|      id|    name|
+--------+--------+
|       0|       A|
|       1|       B|
+--------+--------+
Run Code Online (Sandbox Code Playgroud)

+--------+ -------+
|      id|    text|
+--------+--------+
|       0|     one|
|       0|     two|
|       1|   three|
|       1|    four|
+--------+--------+
Run Code Online (Sandbox Code Playgroud)

期望的结果:

+--------+--------+----------+
|      id|    name|     texts|
+--------+--------+----------+
|       0|       A|   one two|
|       1|       B|three four|
+--------+--------+----------+
Run Code Online (Sandbox Code Playgroud)

到目前为止,我正在尝试以下方法:

var C = A.join(B, "id")
var D = C.groupBy("id", "name").agg(collect_list("text") as "texts")
Run Code Online (Sandbox Code Playgroud)

除了我的文本列是一个字符串数组而不是一个字符串之外,这个效果很好.我非常感谢一些帮助.

scala dataframe apache-spark

6
推荐指数
1
解决办法
6556
查看次数

DataFrame中列的子集上的逻辑OR

我想得到所有行(至少)df [mylist]中的一列包含True.

我现在正在做:

df = df[ df[mylist[0]] | df[mylist[1]] | df[mylist[2]] ]
Run Code Online (Sandbox Code Playgroud)

where mylist列是与列相关的字符串df.但我想这样做的任何长度mylist.

我能想到的唯一方法是循环 mylist并为其中的每个元素创建一个新的数据帧,然后合并/连接或其他任何内容.但这对我来说并不是很聪明.

有没有更好的办法?

python pandas

5
推荐指数
1
解决办法
716
查看次数

标签 统计

pandas ×2

python ×2

apache-spark ×1

dataframe ×1

scala ×1