我一直在搜索,但还没有弄清楚。希望有人能帮助这个 python 新手解决我的问题。
我正在尝试弄清楚如何在 python 中编写 if/then 语句并根据该 if/then 语句执行聚合。我的最终目标是说如果日期 = 1/7/2017 然后使用“假”列中的值。如果 date = all else 然后将两列平均在一起。
这是我目前所拥有的:
import pandas as pd
import numpy as np
import datetime
np.random.seed(42)
dte=pd.date_range(start=datetime.date(2017,1,1), end= datetime.date(2017,1,15))
fake=np.random.randint(15,100, size=15)
fake2=np.random.randint(300,1000,size=15)
so_df=pd.DataFrame({'date':dte,
'fake':fake,
'fake2':fake2})
so_df['avg']= so_df[['fake','fake2']].mean(axis=1)
so_df.head()
最佳答案
假设您已经计算了平均列:
so_df['fake'].where(so_df['date']=='20170107', so_df['avg'])
Out:
0 375.5
1 260.0
2 331.0
3 267.5
4 397.0
5 355.0
6 89.0
7 320.5
8 449.0
9 395.5
10 197.0
11 438.5
12 498.5
13 409.5
14 525.5
Name: fake, dtype: float64
如果不是,您可以用相同的计算替换列引用:
so_df['fake'].where(so_df['date']=='20170107', so_df[['fake','fake2']].mean(axis=1))
要检查多个日期,您需要使用 or 运算符的逐元素版本(管道:|
)。否则会引发错误。
so_df['fake'].where((so_df['date']=='20170107') | (so_df['date']=='20170109'), so_df['avg'])
上面检查两个日期。在 3 个或更多的情况下,您可能希望将 isin
与列表一起使用:
so_df['fake'].where(so_df['date'].isin(['20170107', '20170109', '20170112']), so_df['avg'])
Out[42]:
0 375.5
1 260.0
2 331.0
3 267.5
4 397.0
5 355.0
6 89.0
7 320.5
8 38.0
9 395.5
10 197.0
11 67.0
12 498.5
13 409.5
14 525.5
Name: fake, dtype: float64
关于python - Pandas if/then 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45682596/