다음은 각 개인에 대해 그 달에 기여한 금전적 기여를 제공하는 데이터입니다.
df.head()
| year_mo | name | contribution|
| 202001 | Fey | 30 |
| 202003 | Fey | 20 |
| 202004 | Fey | 10 |
| 202001 | Jay | 30 |
| 202003 | Jay | 20 |
나는 202001-202006에서 각 사람에 대해 연속적인 연도를 생성하고 싶습니다. 그 사람이 기여하지 않으면 다음과 같이 0이됩니다.
| year_mo | name | contribution|
| 202001 | Fey | 30 |
| 202002 | Fey | 0 |
| 202003 | Fey | 20 |
| 202004 | Fey | 10 |
| 202005 | Fey | 0 |
| 202006 | Fey | 0 |
| 202001 | Jay | 30 |
| 202002 | Jay | 0 |
| 202003 | Jay | 20 |
| 202004 | Jay | 0 |
| 202005 | Jay | 0 |
| 202006 | Jay | 0 |
연속 연도 월 df와 함께 외부 조인을 시도한 곳에서이를 수행하기 위해 다음을 시도했지만 원하는 출력을 얻지 못했습니다.
years = list(range(2020,2021,1))
months= list(range(1,7,1))
rows_list = []
for yr in years:
for mn in months:
dict1 = {}
dict1 = {'key' :1, 'year_mo' : (yr*100)+mn}
rows_list.append(dict1)
yearmo_df = pd.DataFrame(rows_list)
df['key'] = 1
new_df = pd.merge(left=df, right=yearmo_df, left_on='year_mo' ,right_on='year_mo', how='outer')
귀하의 안내 또는 제안에 미리 감사드립니다.
우리는 사용할 수 있습니다 MultiIndex
및 reindex
:
new_idx = pd.MultiIndex.from_product([np.arange(202001,202007), df['name'].unique()],
names=['year_mo','name'])
(df.set_index(['year_mo', 'name'])
.reindex(new_idx, fill_value=0)
.sort_index(level=['name','year_mo'])
.reset_index()
)
또 다른 optino pivot_table
뒤에 re_index
, 및 stack
:
(df.pivot_table(index='year_mo', columns='name', fill_value=0)
.reindex(np.arange(202001,202007), fill_value=0)
.stack()
.reset_index()
)
산출:
year_mo name contribution
0 202001 Fey 30
1 202002 Fey 0
2 202003 Fey 20
3 202004 Fey 10
4 202005 Fey 0
5 202006 Fey 0
6 202001 Jay 30
7 202002 Jay 0
8 202003 Jay 20
9 202004 Jay 0
10 202005 Jay 0
11 202006 Jay 0
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다