python - 修改多列数据框
问题描述
我创建了一个如下所示的多列(嵌套列):
input action result
1 2 3 4 action 1 2 3 4
0 89 3 0 5
然后我想给它添加值,所以它看起来像这样:
input action result
1 2 3 4 action 1 2 3 4
0 89 3 0 5 64 1 54 0 34
这是我首先制作该数据框的方法(这可行):
def create_memory_from_input(input: dict) -> pd.DataFrame:
''' creates a dataframe from input dictionary'''
arrays = [
['input' for k in sorted(input.keys())] + ['action'] + ['result' for k in sorted(input.keys())],
[k for k in sorted(input.keys())] + ['action'] + [k for k in sorted(input.keys())]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples)
values = [[v for _,v in sorted(input.items())] + [''] + ['' for _,v in sorted(input.items())]]
return pd.DataFrame(list(values), columns=index)
这是我必须将操作和结果附加到数据框的代码,但它不起作用。我是否正确引用了嵌套列?
input = {2:3, 1:89, 4:5, 3:0}
original = create_memory_from_input(input)
action = 64
result = {2:54, 1:1, 4:34, 3:0}
original['action']['action'][
(original['input'][1] == 89) &
(original['input'][2] == 3) &
(original['input'][3] == 0) &
(original['input'][4] == 5)] = action
任何反馈表示赞赏。我考虑过制作一个新的数据框,然后合并输入列,但这似乎不如简单地过滤数据框并将列设置为正确的值那么有效。
我究竟做错了什么?
解决方案
在这种情况下你应该使用 loc 否则你会得到一个链式赋值。请参阅这篇文章以获得进一步的清晰度。
使用 loc 将数据附加到 DataFrame 的代码如下所示:
input = {2:3, 1:89, 4:5, 3:0}
original = create_memory_from_input(input)
action = 64
result = {2:54, 1:1, 4:34, 3:0}
original.loc[0, ('action', 'action')] = action
for num in range(1, 5):
original.loc[0, ('result', num)] = result[num]
推荐阅读
- pandas - Pandas 数据框从长到宽按具有重复元素的列分组
- sockets - 在使用C语言的socket编程中,如何设置服务器接受客户端建立连接的时间限制?
- c++ - 我可以在 Visual Studio 2017 的同一解决方案中同时使用 C 文件和 C++ 文件吗?
- c# - Regex Vs Char 函数来处理用户输入。什么是最好的,为什么?
- python-3.x - 无法使用 Python3.5 在 Ubuntu 16 中安装 pyinstaller
- python - 如何在 Tensorflow 2 中进行索引查找(word2idx)?
- python - Multiprocessing.Pool.map 返回错误值
- javascript - 有没有办法使用 jsPDF 在移动应用程序中下载或预览 pdf 文件?
- android - 在Android Java中创建位图后为空
- java - 如何将整数转换为十六进制有符号 2 的补码: