我一直试图给你一个可重现的例子,但是Period
不允许我把字典作为数据帧来读。因此,我只是将我的数据帧转换为字典并复制到这里(如果您可以告诉我如何使其可重现,我将编辑这篇文章)。dataframe是一个序列(一列)和两个索引:
{(Period('2020-01', 'M'), False): 213,
(Period('2020-01', 'M'), True): 21,
(Period('2020-02', 'M'), False): 313,
(Period('2020-02', 'M'), True): 13,
(Period('2020-03', 'M'), False): 213,
(Period('2020-03', 'M'), True): 23,
(Period('2020-04', 'M'), False): 213,
(Period('2020-04', 'M'), True): 12,
(Period('2020-05', 'M'), False): 321,
(Period('2020-05', 'M'), True): 121,
(Period('2020-06', 'M'), False): 321,
(Period('2020-06', 'M'), True): 22,
(Period('2020-07', 'M'), False): 333,
(Period('2020-07', 'M'), True): 11}
我正在尝试做的事情是创建第二个列,其中包含按月分组的百分比(索引level=0)。到目前为止,我做到了以下几点:
df["new_column"] = df.groupby(level=0).apply(lambda x: x/sum(x))
错误:
DateParseError: Unknown datetime string format, unable to parse: new_columns
在将百分比分配给new_column
时,groupby似乎无法识别日期格式。为什么?
发布于 2020-07-10 05:25:38
我认为在groupby中指定级别后,只需添加[0]
即可。
df['new column'] = df.groupby(level=0)[0].apply(lambda x:x/sum(x))
以防万一,我已经复制了下面使用的所有代码。
dictionary = ({(pd.Period('2020-01', 'M'), False): 213,
(pd.Period('2020-01', 'M'), True): 21,
(pd.Period('2020-02', 'M'), False): 313,
(pd.Period('2020-02', 'M'), True): 13,
(pd.Period('2020-03', 'M'), False): 213,
(pd.Period('2020-03', 'M'), True): 23,
(pd.Period('2020-04', 'M'), False): 213,
(pd.Period('2020-04', 'M'), True): 12,
(pd.Period('2020-05', 'M'), False): 321,
(pd.Period('2020-05', 'M'), True): 121,
(pd.Period('2020-06', 'M'), False): 321,
(pd.Period('2020-06', 'M'), True): 22,
(pd.Period('2020-07', 'M'), False): 333,
(pd.Period('2020-07', 'M'), True): 11})
df = pd.DataFrame(pd.Series(dictionary))
df['new column'] = df.groupby(level=0)[0].apply(lambda x:x/sum(x))
https://stackoverflow.com/questions/62823724
复制相似问题