首页 > 解决方案 > 如何根据名称变量的条件打印特定输出

问题描述

我有一个data这样的数据框:

数据

我想要这样的输出:

这是我到目前为止所做的:

first = True

for i in range(0, data.shape[0]):
    if data['Name'][i+1] == data['Name'][i] :
        if first:
            first = False
            print(data['Name'][i])
            print()
            print(data['Sentences'][i])
        else:
            print()
            print(data['Sentences'][i])
           
    if data['Name'][i] != data['Name'][i+1] :
        print(data['Name'][i])
        print(data['Sentences'][i])
       
    else :
        print()

但这并没有给我正确的输出,名字没有打印在我想要的地方。我想我放错地方或忘记了循环中的某些东西,但是什么?

谢谢

编辑:我想我想通了!我想知道我是否正确,这就是我在代码中所做的更改:

first = True

for i in range(0, data.shape[0]):
    if data['Name'][i+1] == data['Name'][i] :
        if first:
            first = False
            print(data['Name'][i])
            print()
            print(data['Sentences'][i])
        else:
            print()
            print(data['Sentences'][i])
           
    if data['Name'][i] != data['Name'][i+1] :
        print(data['Name'][i+1]) #i+1 instead of i
        print(data['Sentences'][i+1])# i+1 instead of i
       
    else :
        print()

标签: pythonpython-3.xpandasloopsif-statement

解决方案


我相信有一种更清洁的方法。

笔记:

我的数据框看起来像这样:

在此处输入图像描述

代码

for name in df.name.unique():
    print(name + ':\n')
    for index, value in df.sentences[df.name == name].items():
        print(value)
    print('\n')

输出

name1:

sentence1
sentence2
sentence3


name2:

sentence4


name3:

sentence5
sentence6

尝试根据您的需要修改上面的代码,看看是否有帮助。


推荐阅读