Python 3.x 如何向某些列添加dataframe中无值的行
我有一个数据框,看起来像:Python 3.x 如何向某些列添加dataframe中无值的行,python-3.x,pandas,Python 3.x,Pandas,我有一个数据框,看起来像: month desc value 201911 a 1164 201912 a 971 202001 a 1125 202005 b 1549 202005 a 1038 202006 b 1244 202006 a 1475 202007 a 960 “我的月份”列的范围从201911到202007。列desc具有分类值。 对于desc的每个值,我希望有所有月份的数据,如果它不存在,我将在value列中添加N
month desc value
201911 a 1164
201912 a 971
202001 a 1125
202005 b 1549
202005 a 1038
202006 b 1244
202006 a 1475
202007 a 960
“我的月份”列的范围从201911到202007
。列desc
具有分类值。
对于desc
的每个值,我希望有所有月份的数据,如果它不存在,我将在value
列中添加None
预期产出:
month desc value
201911 a 1164
201912 a 971
202002 a None
202003 a None
202004 a None
202001 a 1125
202005 b 1549
202005 a 1038
202006 b 1244
202006 a 1475
202007 a 960
201911 b None
201912 b None
202001 b None
202002 b None
202003 b None
202004 b None
202007 b None
现在,对于每个desc值,我有一个月的时间
有什么更聪明的方法可以做到这一点吗?您可以通过使用字符串中的最小值和最大值创建的新多索引来使用:
df['month'] = pd.to_datetime(df['month'], format='%Y%m')
desc = df['desc'].unique()
d = pd.date_range(df['month'].min(), '2020-07-01', freq='MS')
df = df.set_index(['month', 'desc'])
mux = pd.MultiIndex.from_product([d, desc], names=['month','desc'])
df = df.reindex(mux).reset_index()
df['month'] = df['month'].dt.strftime('%Y%m')
print (df)
month desc value
0 201911 a 1164.0
1 201911 b NaN
2 201912 a 971.0
3 201912 b NaN
4 202001 a 1125.0
5 202001 b NaN
6 202002 a NaN
7 202002 b NaN
8 202003 a NaN
9 202003 b NaN
10 202004 a NaN
11 202004 b NaN
12 202005 a 1038.0
13 202005 b 1549.0
14 202006 a 1475.0
15 202006 b 1244.0
16 202007 a 960.0
17 202007 b NaN
列month
是否由字符串填充?所有值都是唯一的?将month
设置为索引和重新索引,fillna
在desc
级别使用None
作为唯一值。你没有得到最后一分吗?您能出示一下吗?订单很重要?另外,您是如何在>之前获得月值的??