如何仅从一个数据帧将与特定用户标识相关联的所有字段复制到另一个数据帧?

2024-05-19 15:39:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据帧df,它包含如下表:

timestamp   user_id val1    val2     val3  val4    val5    val6
01/01/2011  1   100 3    5     100     3       5
01/02/2013  1   8        6     12      15      3
01/07/2012  1   19  57   10    9       6       6        
01/11/2014  3   49  6        12    15      3
21/12/2012  3       240  30    240     30       
01/12/2013  3       63                  
01/12/2013  5   51  63       50

我想知道如何仅将与特定用户标识相关联的所有字段复制到另一个数据帧df1,例如获取如下表:

timestamp   user_id val1    val2     val3  val4    val5    val6
01/01/2011  1   100 3    5     100     3       5
01/02/2013  1   8        6     12      15      3
01/07/2012  1   19  57   10    9       6       6    

事先谢谢你的帮助


Tags: 数据用户iddftimestamp标识df1user
1条回答
网友
1楼 · 发布于 2024-05-19 15:39:10

df['user_id'] == 1将返回布尔数组,当user_id列中的值等于1时,该数组为真。因此,可以使用

df.loc[df['user_id'] == 1]

In [8]: df
Out[8]: 
    timestamp  user_id  val1  val2  val3  val4  val5  val6
0  01/01/2011        1   100     3     5   100     3     5
1  01/02/2013        1     8     6    12    15     3   NaN
2  01/07/2012        1    19    57    10     9     6     6
3  01/11/2014        3    49     6    12    15     3   NaN
4  21/12/2012        3   240    30   240    30   NaN   NaN
5  01/12/2013        3    63   NaN   NaN   NaN   NaN   NaN
6  01/12/2013        5    51    63    50   NaN   NaN   NaN

[7 rows x 8 columns]

In [9]: df['user_id'] == 1
Out[9]: 
0     True
1     True
2     True
3    False
4    False
5    False
6    False
Name: user_id, dtype: bool    

In [11]: df.loc[df['user_id'] == 1]
Out[11]: 
    timestamp  user_id  val1  val2  val3  val4  val5  val6
0  01/01/2011        1   100     3     5   100     3     5
1  01/02/2013        1     8     6    12    15     3   NaN
2  01/07/2012        1    19    57    10     9     6     6

[3 rows x 8 columns]

df[df['user_id'] == 1]也可以,但我认为它不太清楚,因为它使用的语法与您选择列时使用的语法相同


下面是我如何基于您发布的表重新构建DataFramedf。我已经编辑了数据,在user_id列中包含逗号,以模拟实际数据。我救了你

timestamp   user_id val1    val2     val3  val4    val5    val6
01/01/2011  1   100 3    5     100     3       5
01/02/2013  1   8        6     12      15      3
01/07/2012  1   19  57   10    9       6       6        
01/11/2014  3   49  6        12    15      3
21/12/2012  3       240  30    240     30       
01/12/2013  3       63                  
01/12/2013  1,500   51  63       50

在一个名为data的文件中运行

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')  # Set a locale which uses commas as the separator
df = pd.read_table('data', sep='\s+', converters={u'user_id':locale.atoi})

相关问题 更多 >