【发布时间】:2020-03-13 17:35:02
【问题描述】:
给定一个如下的数据框:
A0 A1 A2 A3
0 9 1 2 8
1 9 7 6 9
2 1 7 4 6
3 0 8 4 8
4 0 1 6 0
5 7 1 4 3
6 6 3 5 9
7 3 3 2 8
8 6 3 0 8
9 3 2 7 1
我需要将一个函数逐行应用于一组列,以使用该函数的结果创建一个新列。
Pandas 中的一个例子是:
df = pd.DataFrame(data=None, columns=['A0', 'A1', 'A2', 'A3'])
df['A0'] = np.random.randint(0, 10, 10)
df['A1'] = np.random.randint(0, 10, 10)
df['A2'] = np.random.randint(0, 10, 10)
df['A3'] = np.random.randint(0, 10, 10)
df['mean'] = df.mean(axis=1)
df['std'] = df.iloc[:, :-1].std(axis=1)
df['any'] = df.iloc[:, :-2].apply(lambda x: np.sum(x), axis=1)
结果是:
A0 A1 A2 A3 mean std any
0 9 1 2 8 5.00 4.082483 20
1 9 7 6 9 7.75 1.500000 31
2 1 7 4 6 4.50 2.645751 18
3 0 8 4 8 5.00 3.829708 20
4 0 1 6 0 1.75 2.872281 7
5 7 1 4 3 3.75 2.500000 15
6 6 3 5 9 5.75 2.500000 23
7 3 3 2 8 4.00 2.708013 16
8 6 3 0 8 4.25 3.500000 17
9 3 2 7 1 3.25 2.629956 13
如何在 PySpark 中做类似的事情?
【问题讨论】:
-
使用udf spark.apache.org/docs/latest/api/python/…,例如:
s_std = udf(lambda x: float(np.std(x)),'float')然后df.withColumn('std', s_std(array(*df.columns))).show() -
看看这个question,它是关于总和的,如果你去看看pyspark.sql,你可能会找到你想做的另一个
标签: python pandas dataframe apache-spark pyspark