亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將多行按列值合并為一行,并根據連接行數拆分為多個數據幀,用于多列

將多行按列值合并為一行,并根據連接行數拆分為多個數據幀,用于多列

倚天杖 2022-06-28 10:58:35
它顯示了在要組合一列和額外一列的情況下如何組合行。我現在正在為有很多列的情況尋找解決方案,并且我仍然想基于一列組合行。我希望如何處理是:首先列出一種類型的所有列,然后以與第一次相同的順序列出另一種類型的列。這是一個最小的例子data = [['tom', 'ca', 2], ['ni2ck', 'ma', 2], ['j3uli', 'ny', 4] , ['nic4k', 'ma', 4], ['jul5i', 'ny', 4] , ['nic6k', 'ma', 7], ['ju7li', 'ny', 7] , ['nic8k', 'ma', 7], ['ju9li', 'ny', 7] , ['nic1k', 'ma', 8], ['car', 'ny', 8]]df = pd.DataFrame(data, columns = ['Name', 'Location', 'Age']) df 結果是Name    Location    Age0   tom ca  21   ni2ck   ma  22   j3uli   ny  43   nic4k   ma  44   jul5i   ny  45   nic6k   ma  76   ju7li   ny  77   nic8k   ma  78   ju9li   ny  79   nic1k   ma  810  car ny  8這將是期望的結果    Name    Name    Location    Location    Age0   tom ni2ck   ca  ma  21   nic1k   car ma  ny  8Name    Name    Name    Location    Location    Location    Age0   j3uli   nic4k   jul5i   ny  ma  ny  4Name    Name    Name    Name    Location    Location    Location    Location    Age0   nic6k   ju7li   nic8k   ju9li   ma  ny  ma  ny  7重要的是,正確的位置與相應名稱的順序相同。
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

從@Wen 解決方案開發。而不是pivot,使用pivot_table


df['New']=df.groupby('Age').cumcount()

s= df.pivot_table(index='Age',columns='New',

                  values=['Name', 'Location'], 

                  aggfunc='first').reindex(['Name', 'Location'], axis=1, level=0)

s.columns = s.columns.map('{0[0]}{0[1]}'.format)


l=[y.dropna(1).reset_index() for _ , y in s.groupby(s.isnull().sum(1))]


In [499]: l[0]

Out[499]:

   Age  Name0  Name1  Name2  Name3 Location0 Location1 Location2 Location3

0    7  nic6k  ju7li  nic8k  ju9li        ma        ny        ma        ny


In [500]: l[1]

Out[500]:

   Age  Name0  Name1  Name2 Location0 Location1 Location2

0    4  j3uli  nic4k  jul5i        ny        ma        ny


In [501]: l[2]

Out[501]:

   Age  Name0  Name1 Location0 Location1

0    2    tom  ni2ck        ca        ma

1    8  nic1k    car        ma        ny

如果您想保留多索引列,請跳過列map上的命令


df['New']=df.groupby('Age').cumcount()

s= df.pivot_table(index='Age',columns='New',

                  values=['Name', 'Location'], 

                  aggfunc='first').reindex(['Name', 'Location'], axis=1, level=0)


l=[y.dropna(1).reset_index() for _ , y in s.groupby(s.isnull().sum(1))]


In [544]: l[0]

Out[544]:

    Age   Name                      Location

New          0      1      2      3        0   1   2   3

0     7  nic6k  ju7li  nic8k  ju9li       ma  ny  ma  ny


In [545]: l[1]

Out[545]:

    Age   Name               Location

New          0      1      2        0   1   2

0     4  j3uli  nic4k  jul5i       ny  ma  ny


In [546]: l[2]

Out[546]:

    Age   Name        Location

New          0      1        0   1

0     2    tom  ni2ck       ca  ma

1     8  nic1k    car       ma  ny


查看完整回答
反對 回復 2022-06-28
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號