我经常使用用过的pandas agg()函数来对data.frame的每一列运行汇总统计.例如,以下是产生均值和标准差的方法:
df = pd.DataFrame({'A': ['group1', 'group1', 'group2', 'group2', 'group3', 'group3'],
'B': [10, 12, 10, 25, 10, 12],
'C': [100, 102, 100, 250, 100, 102]})
>>> df
[output]
A B C
0 group1 10 100
1 group1 12 102
2 group2 10 100
3 group2 25 250
4 group3 10 100
5 group3 12 102
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,将各行发送到agg函数的顺序无关紧要.但请考虑以下示例,其中:
df.groupby('A').agg([np.mean, lambda x: x.iloc[1] ])
[output]
mean <lambda> mean <lambda>
A
group1 11.0 12 101 102
group2 17.5 25 175 250
group3 11.0 …Run Code Online (Sandbox Code Playgroud) 我有一个包含以下数据的数据框:
invoice_no dealer billing_change_previous_month date
110 1 0 2016-12-31
100 1 -41981 2017-01-30
5505 2 0 2017-01-30
5635 2 58730 2016-12-31
Run Code Online (Sandbox Code Playgroud)
我想只有一个拥有最长日期的经销商.所需的输出应该是这样的:
invoice_no dealer billing_change_previous_month date
100 1 -41981 2017-01-30
5505 2 0 2017-01-30
Run Code Online (Sandbox Code Playgroud)
每个经销商应该与最大日期不同,提前感谢您的帮助.
标题可能有点令人困惑,所以这里是一个例子:
从:
id | timestamp
1 | 2015-12-02 00:00:00
1 | 2015-12-03 00:00:00 <--- latest for id 1
2 | 2015-12-02 00:00:00
2 | 2015-12-04 00:00:00
2 | 2015-12-06 00:00:00 <--- latest for id 2
Run Code Online (Sandbox Code Playgroud)
对此:
id | timestamp
1 | 2015-12-03 00:00:00
2 | 2015-12-06 00:00:00
Run Code Online (Sandbox Code Playgroud) 我有熊猫 DF 如下,
id age gender country sales_year
1 None M India 2016
2 23 F India 2016
1 20 M India 2015
2 25 F India 2015
3 30 M India 2019
4 36 None India 2019
Run Code Online (Sandbox Code Playgroud)
我想按 id 分组,根据 sales_date 取最新的 1 行,所有非空元素。
预期输出,
id age gender country sales_year
1 20 M India 2016
2 23 F India 2016
3 30 M India 2019
4 36 None India 2019
Run Code Online (Sandbox Code Playgroud)
在pyspark中,
df = df.withColumn('age', f.first('age', True).over(Window.partitionBy("id").orderBy(df.sales_year.desc())))
Run Code Online (Sandbox Code Playgroud)
但我需要在熊猫中相同的解决方案。
编辑:: …