【发布时间】:2020-06-23 02:06:44
【问题描述】:
Pandas GroupBy 并用标准化计数替换值
样本 DF:
df = pd.DataFrame(np.random.randint(0,20,size=(10,3)),columns=["c1","c2","c3"])
df["r1"]=["Apple","Mango","Apple","Mango","Mango","Mango","Apple","Mango","Apple","Apple"]
df["r2"]=["Orange","lemon","lemon","Orange","lemon","Orange","lemon","lemon","Orange","lemon"]
df["date"] = ["2002-01-01","2002-01-01","2002-01-01","2002-01-01","2002-01-01",
"2002-01-01","2002-02-01","2002-02-01","2002-02-01","2002-02-01"]
df["date"] = pd.to_datetime(df["date"])
df
DF:
c1 c2 c3 r1 r2 date
0 10 2 0 Apple Orange 2002-01-01
1 10 10 13 Mango lemon 2002-01-01
2 0 12 0 Apple lemon 2002-01-01
3 1 13 8 Mango Orange 2002-01-01
4 6 5 9 Mango lemon 2002-01-01
5 3 18 13 Mango Orange 2002-01-01
6 2 6 7 Apple lemon 2002-02-01
7 0 4 7 Mango lemon 2002-02-01
8 1 10 19 Apple Orange 2002-02-01
9 11 18 2 Apple lemon 2002-02-01
我正在尝试按date 列分组,并用标准化计数替换选定的列。
例如:
在2002-01-01 组中,r1 列中的值Apple 将替换为0.3,因为在该组中有6 记录和2records 有Apple,所以2/6 和@ 987654332@ 将替换为 4/6 即 0.6
熊猫解决方案:
df.groupby("date")[["r1","r2"]].apply(lambda x: x.map(x.value_counts()))
错误:
AttributeError: 'DataFrame' object has no attribute 'map'
有没有一种 pandas 方法可以代替迭代的 iterrows 解决方案。
【问题讨论】:
-
你能提供你想要的输出吗?
标签: python pandas pandas-groupby