簡體   English   中英

基於一列“分組”行,然后為現有其他列值的可能組合創建新列

[英]"Group" rows based on one column, then create new columns for the possible combinations of existing other columns' values

我有以下形式的數據框:

日期 I1 I2 F1 F2
1 1 一種 v1 v9
1 1 v2 v10
1 10 一種 v3 v11
1 10 v4 v12
2 1 一種 v5 v13
2 1 v6 v14
2 10 一種 v7 v15
2 10 v8 v16

我想根據來自“I1”和“I2”的值的可能組合創建新列,並將相應的值全部放在一行中(對於同一日期)。 生成的數據框應如下所示(最多列的順序,這無關緊要,我只是出於可視化目的選擇了一個):

日期 F1-1-A F1-1-B F1-10-A F1-10-B F2-1-A F2-1-B F2-10-A F2-10-B
1 v1 v2 v3 v4 v9 v10 v11 v12
2 v5 v6 v7 v8 v13 v14 v15 v16

在熊貓中實現這一目標的最簡潔和通用的方法是什么?

你正在尋找一個支點。 執行此操作后,您將需要加入多索引列名稱以使其變平。

df = df.pivot(index='date',columns=['I1','I2'], values=['F1','F2'])
df.columns = ['-'.join(map(str,x)) for x in df.columns]
df.reset_index(inplace=True)

輸出

   date F1-1-A F1-1-B F1-10-A F1-10-B F2-1-A F2-1-B F2-10-A F2-10-B
0     1     v1     v2      v3      v4     v9    v10     v11     v12
1     2     v5     v6      v7      v8    v13    v14     v15     v16

@Chris 的解決方案效果很好; pivot_widerpyjanitor可以進行pivot_wider抽象,以展pyjanitor (或在需要時進行一些其他操作):

#pip install git+https://github.com/pyjanitor-devs/pyjanitor.git
import pandas as pd
import janitor
df.pivot_wider(index='date', names_from=['I1', 'I2'], names_sep='-')

   date F1-1-A F1-1-B F1-10-A F1-10-B F2-1-A F2-1-B F2-10-A F2-10-B
0     1     v1     v2      v3      v4     v9    v10     v11     v12
1     2     v5     v6      v7      v8    v13    v14     v15     v16

請注意,僅當索引和列的組合是唯一的時,pivot 才起作用; 如果不是,更好的選擇是pivot_table

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM