所以通过使用
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)
但是我有很多行,所以这个很慢.有人有更快的解决方案吗?我更喜欢一种不需要明确知道列名的解决方案.
我是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)
除了我的文本列是一个字符串数组而不是一个字符串之外,这个效果很好.我非常感谢一些帮助.
我想得到所有行(至少)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并为其中的每个元素创建一个新的数据帧,然后合并/连接或其他任何内容.但这对我来说并不是很聪明.
有没有更好的办法?