我想对数据框中的列重新排序,并将基础值保留在正确的列中。
例如,这是我的数据框
cols = [ ['Three', 'Two'],['A', 'D', 'C', 'B']]
header = pd.MultiIndex.from_product(cols)
df = pd.DataFrame([[1,4,3,2,5,8,7,6]]*4,index=np.arange(1,5),columns=header)
df.loc[:,('One','E')] = 9
df.loc[:,('One','F')] = 10
>>> df
Run Code Online (Sandbox Code Playgroud)
我想将其更改如下:
header2 = pd.MultiIndex(levels=[['One', 'Two', 'Three'], ['E', 'F', 'A', 'B', 'C', 'D']],
labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2], [0, 1, 2, 3, 4, 5, 2, 3, 4, 5]])
df2 = pd.DataFrame([[9,10,1,2,3,4,5,6,7,8]]*4,index=np.arange(1,5), columns=header2)
>>>>df2
Run Code Online (Sandbox Code Playgroud) 我正在尝试在多索引数据框中设置一个值。我正在使用 .loc 但我仍然收到 SettingsWithCopyWarning。我已阅读文档,但我不确定应该如何执行此操作。我究竟做错了什么?
“SettingWithCopyWarning:正在尝试在 DataFrame 切片的副本上设置值。尝试使用 .loc[row_indexer,col_indexer] = value 代替
请参阅文档中的注意事项:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj[item] = s"
arrays = [np.array(['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D']),
np.array(['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'])]
df = pd.DataFrame(np.random.randn(6, 8), columns=arrays)
mask = df.loc[:,('A','one')].ge(0)
df[mask].loc[:,('B')] = "A"
Run Code Online (Sandbox Code Playgroud) table = pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9]],
columns=['High','Middle','Low'],
index=['Blue','Green','Red'])
df = pd.DataFrame(data=[['High','Blue'],
['High','Green'],
['Low','Red'],
['Middle','Blue'],
['Low','Blue'],
['Low','Red']],
columns=['A','B'])
>>> df
A B
0 High Blue
1 High Green
2 Low Red
3 Middle Blue
4 Low Blue
5 Low Red
>>> table
High Middle Low
Blue 1 2 3
Green 4 5 6
Red 7 8 9
Run Code Online (Sandbox Code Playgroud)
我正在尝试添加第三列"C",它基于表中的值.所以第一行的值为1,第二行的值为4等.
如果这将是一维查找我会将表转换为字典并将使用df['C'] = df['A'].map(table).但是由于这是二维的,我无法弄清楚如何使用地图或应用.
理想情况下,我会将表转换为字典格式,因此我将其与json中的其他字典一起保存,但这不是必需的.