小编Jel*_*erd的帖子

重新排序多索引 Pandas 数据框

我想对数据框中的列重新排序,并将基础值保留在正确的列中。

例如,这是我的数据框

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)

python multi-index dataframe pandas

5
推荐指数
1
解决办法
2552
查看次数

在多索引 Pandas Dataframe 中设置值的正确方法

我正在尝试在多索引数据框中设置一个值。我正在使用 .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)

python multi-index pandas

4
推荐指数
1
解决办法
3971
查看次数

基于另外两个列和表在pandas中创建列

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中的其他字典一起保存,但这不是必需的.

python mapping dictionary pandas

1
推荐指数
1
解决办法
27
查看次数

标签 统计

pandas ×3

python ×3

multi-index ×2

dataframe ×1

dictionary ×1

mapping ×1