当前位置: 首页 > 知识库问答 >
问题:

将数据帧中的值列表追加到新列[重复]

钱京
2023-03-14

我试图做的是从列“in_reply_to_user_id”(不在图片中,因为df太宽,无法容纳)与给定id具有相同值的行中获取文本,并将文本附加到列表中,然后将其放入新列中。例如,所有tweet中的“in_reply_to_user_id”列等于第一条tweet的“id”的文本都应该放在一个列表中,然后添加到数据框中名为“reples”的新列中。以下是我尝试过的一些事情:

for i in testb['in_reply_to_user_id']:
   for j in test['user.id']:
       if i == j:
           index=testb.index()
           test['replies'].append(testb['text'].iloc[index]) ```

test would be the original dataframe and testb would be a copy that i created in order to try to run the code above. it is just a copy of test.

共有2个答案

吴俊风
2023-03-14

假设原始Dataframe看起来像这样:

         text              user_id   reply_to        
0   this is reply to 3       1         3         
1   this is reply to 3       2         3         
2   this is reply to 2       3         2         
3   this is reply to 2       4         2               
4   this is reply to 1       5         1               

然后通过使用df.loc()我们可以获得包含对每个文本的回复的记录:

import pandas as pd

data = [['this is reply to 3', 1, 3], ['this is reply to 3', 2, 3],['this is 
reply to 2', 3, 2],['this is reply to 2', 4, 2], ['this is reply to 1', 5,1 ]]

df = pd.DataFrame(data, columns = ['text', 'user_id', 'reply_to']) 

replies = []

for user_id in df.user_id:
    text = df.loc[df['reply_to'] == user_id].text.values
    replies.append(text)

df['replies'] = replies

生成的数据帧如下所示:

         text              user_id   reply_to         replies
0   this is reply to 3       1         3         [this is reply to 1]
1   this is reply to 3       2         3         [this is reply to 2, this is reply to 2]
2   this is reply to 2       3         2         [this is reply to 3, this is reply to 3]
3   this is reply to 2       4         2               []
4   this is reply to 1       5         1               []
耿学义
2023-03-14

这里有一个简单的解决方案,在所有行上循环。

import numpy as np
import pandas as pd

# example data
df = pd.DataFrame({'id': [1, 2, 3, 4],
                   'text': ['How are you?', 'Fine.', 'Okay.', 'hi'], 
                   'in_reply_to_user_id': [4, 1, 1, 3]})

# initiate new column
df['replies'] = np.repeat(None, len(df))

# assign lists as described in the question
for i in df.index:
    df.at[i, 'replies'] = list(df.text[df.in_reply_to_user_id == df.id[i]])

# show results
df
    id  text            in_reply_to_user_id     replies
0   1   How are you?    4                       [Fine., Okay.]
1   2   Fine.           1                       []
2   3   Okay.           1                       [hi]
3   4   hi              3                       [How are you?]
 类似资料:
  • 所以我已经初始化了一个空的熊猫数据帧,我想在这个数据帧中迭代地追加列表(或系列)作为行。最好的方法是什么?

  • 我的清单如下: 我需要将上面列表中的数据添加到下面的列表中,其中第0行应该有值test1和test2。第1行应该有test3和test4

  • 我有一份这种格式的清单 我想用这些信息创建一个数据框架,其中一个列名为“情绪”,另一个列名为“分数” 数据帧: 我不知道如何将我的列表转换为具有这种结构的数据格式

  • 我需要将多个列附加到现有的spark dataframe,其中列名称在列表中给定,假设新列的值是常量,例如给定的输入列和dataframe是 并且在附加两列后,假设 col1 的常量值为“val1”,col2 的常量值为“val2”,则输出数据帧应为 我已经编写了一个函数来追加列 有没有更好的方式,更具功能性的方式去做。 谢啦

  • 问题是:“要求用户输入其国家的详细信息,使用输入的值创建一个国家的新对象,并将其附加到数组列表的开头。” 我确实遵循了最基本的规则来防止任何错误,但是当我试图编译时。它复制了一些像日本和美国这样的物体。尝试许多不同的方法来调试和理解问题,但我找不到。

  • 问题内容: 我需要更新表名(col1name) 如果已经有数据,我需要将其附加值’a,b,c’如果为NULL,则需要添加值’a,b,c’ 我知道有一个CONCAT参数,但是不确定SQL语法是什么。 以上正确吗? 问题答案: 试试这个查询: 请参阅此sql小提琴演示。