gpt4 book ai didi

python - 为什么转置不能让我用 df.loc ["Y"] 行连接数据帧

转载 作者:行者123 更新时间:2023-12-05 04:19:09 25 4
gpt4 key购买 nike

我有 2 个数据框:

df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6]},
index=['X', 'Y', 'Z'])

df1 = pd.DataFrame({'M': [10, 20, 30],
'N': [40, 50, 60]},
index=['S', 'T', 'U'])

我想在 df1 中附加一行 df 数据框。

我使用以下代码提取行:

row = df.loc['Y']

当我打印这个时,我得到:

A    2
B 5
Name: Y, dtype: int64

A 和 B 是键值或列标题名称。所以我把它换成

row_25 = row.transpose()

我打印 row_25 并得到:

A    2
B 5
Name: Y, dtype: int64

这与行相同,因此似乎没有发生转置

然后我添加此代码以将行添加到 df1:

result = pd.concat([df1, row_25], axis=0, ignore_index=False)
print(result)

当我打印 df1 时,我得到:

      M     N    0
S 10.0 40.0 NaN
T 20.0 50.0 NaN
U 30.0 60.0 NaN
A NaN NaN 2.0
B NaN NaN 5.0

我希望 A 和 B 是列标题(键值),行名称 (Y) 是行索引。

我做错了什么?

最佳答案

尝试

pd.concat([df1, df.loc[['Y']])

它产生:

    M       N       A      B
S 10.0 40.0 NaN NaN
T 20.0 50.0 NaN NaN
U 30.0 60.0 NaN NaN
Y NaN NaN 2.0 5.0

不确定这是否是您想要的。

要从结果中排除列名称“M”和“N”,您可以预先重命名列:

>>> df1.columns = ['A', 'B']
>>> pd.concat([df1, df.loc[['Y']])

A B
S 10 40
T 20 50
U 30 60
Y 2 5

你需要双方括号的原因是单方括号返回一个一维系列,不能转置。双括号返回一个 2D DataFrame(通常双括号用于引用多个列,如 df1.loc[['X', 'Y']];它在NumPy)。

如果您对双括号过敏,请使用

pd.concat([df1.rename(columns={'M': 'A', 'N': 'B'}), 
df.filter('Y', axis=0)])

最后,如果你真的想转置一些东西,你可以将系列转换为帧并转置它:

>>> df.loc['Y'].to_frame().T

A B
Y 2 5

关于python - 为什么转置不能让我用 df.loc ["Y"] 行连接数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74941486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com