我正在嘗試做 pd.wide_to_long 并且我想根據括號內的內容進行分離。我在這里查閱了熊貓手冊,關閉示例如下。我更改了列名以匹配我所擁有的內容。
np.random.seed(0)
df = pd.DataFrame({'A(weekly_2010)': np.random.rand(3),
'A(weekly_2011)': np.random.rand(3),
'B(weekly_2010)': np.random.rand(3),
'B(weekly_2011)': np.random.rand(3),
'X' : np.random.randint(3, size=3)})
df['id'] = df.index
我會做
df1=pd.wide_to_long(df, stubnames=['A', 'B'], i=['id'], j='year', sep='()', suffix='\w ')
這將回傳一個空資料框。我查看了這個示例并切換了 i 和 J,但它回傳一個 KeyError:“[Index(['year'], dtype='object')] are in the [columns]”我在 sep 嘗試了以下操作= 仍然沒有運氣。有人知道如何獲取以下資料框。
df1=pd.wide_to_long(df, stubnames=['A', 'B'], i=['id'], j='year', sep='(*)', suffix='\w ')
df1=pd.wide_to_long(df, stubnames=['A', 'B'], i=['id'], j='year', sep='\\()', suffix='\w ')
df1=pd.wide_to_long(df, stubnames=['A', 'B'], i=['id'], j='year', sep=r'\\()', suffix='\w ')
df1=pd.wide_to_long(df11, stubnames=['A', 'B'], i=['id'], j='year', sep=r'\(*\)', suffix='\w ')
所需的資料框將是
desiredDF= pd.DataFrame({'year':["(weekly_2010)","(weekly_2010)","(weekly_2010)","(weekly_2011)","(weekly_2011)","(weekly_2011)"],
'A': np.random.rand(6),
'B': np.random.rand(6),
'X' : np.random.randint(6, size=6),
'id':np.random.randint(6, size=6)})
顯然使用相同的數字,我只想顯示重要的列,即年份列。我需要進行資料透視,因為我的資料框更復雜,并且使用其他格式會弄亂數字。如果有人知道如何在 sep 中寫作,我將不勝感激!
uj5u.com熱心網友回復:
試試這個,洗掉尾隨的右括號并在左括號上分開:
df.columns = df.columns.str.replace(')','', regex=False)
pd.wide_to_long(df, stubnames=['A', 'B'], i=['id'], j='year', sep='(', suffix='\w ')
輸出:
X A B
id year
0 weekly_2010 0 0.548814 0.437587
1 weekly_2010 1 0.715189 0.891773
2 weekly_2010 1 0.602763 0.963663
0 weekly_2011 0 0.544883 0.383442
1 weekly_2011 1 0.423655 0.791725
2 weekly_2011 1 0.645894 0.528895
我發現有時您需要做一些準備作業才能使 pd.wide_to_long 正常作業。
uj5u.com熱心網友回復:
@ScottBoston 的解決方案效果很好。我建議提供一個替代方案pd.wide_to_long,提供更大的靈活性,同時仍然具有高性能 - 來自pyjanitor的pivot_longer:
# pip install pyjanitor
import pandas as pd
import janitor
df.pivot_longer(index=['X', 'id'],
names_to = ('.value', 'year'),
names_pattern=r"(.)(. )")
X id year A B
0 0 0 (weekly_2010) 0.548814 0.437587
1 1 1 (weekly_2010) 0.715189 0.891773
2 1 2 (weekly_2010) 0.602763 0.963663
3 0 0 (weekly_2011) 0.544883 0.383442
4 1 1 (weekly_2011) 0.423655 0.791725
5 1 2 (weekly_2011) 0.645894 0.528895
在.value這種情況下,告訴函式將列的該部分保留為標題。這由傳遞給names_patternor的引數決定names_sep。
堅持pd.wide_to_long,只需對引數使用通用. 正則運算式suffix:
pd.wide_to_long(df,
stubnames = ['A','B'],
i = 'id',
j = 'year',
sep='',
suffix='. ')
X A B
id year
0 (weekly_2010) 0 0.548814 0.437587
1 (weekly_2010) 1 0.715189 0.891773
2 (weekly_2010) 1 0.602763 0.963663
0 (weekly_2011) 0 0.544883 0.383442
1 (weekly_2011) 1 0.423655 0.791725
2 (weekly_2011) 1 0.645894 0.528895
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527129.html
標籤:Python熊猫数据框
