![](/img/trans.png)
[英]Convert a pandas dataframe in a transactional data format to a list - Python
[英]Dataframe PANDAS Python format data
我在 dataframe 中有這種格式的數據,
我想有以下格式的數據,
任何人都可以幫助如何獲得這種格式。
The pivot
function will do the job: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html
您可以根據預期結果定義索引和列:
df.pivot(index=["lev1", "lev2"], columns=["lev3"],values="values")
我分享的鏈接上有一些有用的例子。 我希望這可以解決您的問題。
# create a demo sample
nan = np.nan
data = [{0: 'a', 1: 1.0, 2: 'g'},
{0: 'b', 1: 2.0, 2: '7'},
{0: 'c', 1: 3.0, 2: nan},
{0: 'd', 1: 4.0, 2: nan},
{0: 'e', 1: 5.0, 2: nan},
{0: 'f', 1: 6.0, 2: nan},
{0: nan, 1: nan, 2: nan},
{0: 'a', 1: 8.0, 2: 'g'},
{0: 'b', 1: 9.0, 2: '14'},
{0: 'c', 1: 10.0, 2: nan},
{0: 'd', 1: 11.0, 2: nan},
{0: 'e', 1: 12.0, 2: nan},
{0: 'f', 1: 13.0, 2: nan}]
df = pd.DataFrame(data)
創建一個組標簽來定位記錄,然后使用unstack
將inner index
轉換為列。
# set a record group tag
cond = df[0] == 'a'
df['tag'] = np.where(cond, 1, 0).cumsum()
# set column 0 as column name
dfn = (df.set_index(['tag', 0])[1].unstack()
.dropna(how='all',axis=1))
# get column 2's value, with every group_tag's second row
dfn['g'] = df.groupby('tag').apply(lambda x: x[2].iloc[1])
結果:
print(df)
0 1 2 tag
0 a 1.0 g 1
1 b 2.0 7 1
2 c 3.0 NaN 1
3 d 4.0 NaN 1
4 e 5.0 NaN 1
5 f 6.0 NaN 1
6 NaN NaN NaN 1
7 a 8.0 g 2
8 b 9.0 14 2
9 c 10.0 NaN 2
10 d 11.0 NaN 2
11 e 12.0 NaN 2
12 f 13.0 NaN 2
print(dfn)
0 a b c d e f g
tag
1 1.0 2.0 3.0 4.0 5.0 6.0 7
2 8.0 9.0 10.0 11.0 12.0 13.0 14
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.