小编Muz*_*uzz的帖子

可以在 pandas 数据框中创建子列吗?

数据框

我正在 Jupyter Notebooks 中使用数据框,但遇到了一些困难。数据框由位置组成,这些位置由坐标表示。这些点代表驾驶员在给定日期所采取的路线。

目前有3个栏目;开始、中间或结束。

司机从起点开始新的一天,访问 1 个或多个中间点,并在一天结束时返回终点。起点就像基准位置,因此终点与起点相同。

这是非常基本的,但我在可视化这些数据时遇到了困难。我在想下面这样的事情来帮助改善我的情况:

|     Start      |       Intermediary       |        End        |
|       |        |            |             |         |         |
_________________________________________________________________
| s_lat | s_lng  |  i_lat     |  i_lng      | e_lat   | e_lng   |
Run Code Online (Sandbox Code Playgroud)

或者我最好放弃前 3 列(开始、中间、结束)?

我不想按照指南在这里开始讨论,所以我很想了解有关 Python Pandas 的新知识,以及是否有办法改进我当前的方法。

python dataframe pandas

9
推荐指数
1
解决办法
3万
查看次数

按字母顺序对 Pandas 数据框中的数据进行排序

我有一个数据框,我需要在其中按字母顺序对一列(逗号分隔)的内容进行排序:

ID   Data
1     Mo,Ab,ZZz
2     Ab,Ma,Bt
3     Xe,Aa
4     Xe,Re,Fi,Ab
Run Code Online (Sandbox Code Playgroud)

输出:

ID   Data
1     Ab,Mo,ZZz
2     Ab,Bt,Ma
3     Aa,Xe
4     Ab,Fi,Re,Xe
Run Code Online (Sandbox Code Playgroud)

我试过了:

df.sort_values(by='Data')
Run Code Online (Sandbox Code Playgroud)

但这不起作用

numpy dataframe pandas

7
推荐指数
4
解决办法
426
查看次数

计算时间序列中的峰值

我正在计算 numpy 数组中波峰和波谷的数量。

我有一个像这样的 numpy 数组:

stack = np.array([0,0,5,4,1,1,1,5,1,1,5,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1,5,1,1])
Run Code Online (Sandbox Code Playgroud)

绘制后,这些数据看起来像这样:

“堆栈”数组的时间序列图

我正在寻找这个时间序列中的峰值数量:

这是我的代码,它适用于这样的示例,其中时间序列表示中有明显的波峰和波谷。我的代码返回找到峰值的数组的索引。

#example
import numpy as np
from scipy.signal import argrelextrema

stack = 
np.array([0,0,5,4,1,1,1,5,1,1,5,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1,5,1,1])

# for local maxima
y = argrelextrema(stack, np.greater)

print(y)
Run Code Online (Sandbox Code Playgroud)

结果:

(array([ 2,  7, 10, 14, 17, 20, 23, 26]),)
Run Code Online (Sandbox Code Playgroud)

已发现8个清晰的峰,可以正确计数。

我的解决方案似乎不适用于不那么清晰和更混乱的数据。

下面的数组不能很好地工作,也找不到我需要的峰值:

array([ 0.        ,  5.70371806,  5.21210157,  3.71144767,  3.9020162 ,
    3.87735984,  3.89030171,  6.00879918,  4.91964227,  4.37756275,
    4.03048542,  4.26943028,  4.02080471,  7.54749062,  3.9150576 ,
    4.08933851,  4.01794766,  4.13217794,  4.15081972,  8.11213474,
    4.6561735 ,  4.54128693,  3.63831552,  4.3415324 ,  4.15944019,
    8.55171441,  4.86579459,  4.13221943, …
Run Code Online (Sandbox Code Playgroud)

python arrays scipy

5
推荐指数
2
解决办法
2315
查看次数

从列表Python列表中删除列表

我有一份清单清单:

[[0.0,3.3, 4.9, 7.5], [4, 6, 90, 21, 21.1], [3, 43, 99, 909, 2.11, 76, 76.9, 1000]]
Run Code Online (Sandbox Code Playgroud)

如果该子列表包含给定范围之外的元素,我想从列表中删除子列表.

例如; 范围= 3,15

因此,如果子列表包含-69,-17,0,1,2,15.1,26.99,即任何超出该范围的元素,我希望删除该子列表.

应返回的输出是列表列表,其中所有子列表仅包含该范围内的值:

[[6, 5, 7, 13, 12], [4, 6, 10], [9, 9, 4, 5, 11], [4, 4]]
Run Code Online (Sandbox Code Playgroud)

我知道这里有类似的问题,例如:

从列表列表中删除子列表

Python - 从列表列表中删除列表(与.pop()类似的功能)

我无法让这些解决方案起作用.

我的目标是不删除重复的列表:有很多问题,但这不是我的目标.

我的代码:

max_value = 15
min_value = 3

for sublist in my_list:
  for item in sublist:
    if(item < min_value):
        my_list.pop(sublist)
    if(item > max_value):
        my_list.pop(sublist)
print(my_list)
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: 'list' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)

python numpy list

4
推荐指数
1
解决办法
2614
查看次数

从DataFrame中选择ID计数大于X的行

我有一个数据框,其中包含ID的列。此ID代表一个人,可以多次出现:

        col_id    col2     col3     col4....
row1      1
row2      1
row3      2
row4      3
row5      3
row6      3
row7      1
row8      7
Run Code Online (Sandbox Code Playgroud)

我需要返回一个新的数据框,其中ID列的value_counts大于2。

新数据框:

         col_id    col2     col3     col4....
row1      1
row2      1
row3      3
row4      3
row5      3
row6      1
Run Code Online (Sandbox Code Playgroud)

此新数据框包含ID计数仅大于2的行。

编辑

在这里,我需要按ID分隔数据。理想情况下,我想要一个对每个ID都有一个数据框的解决方案:

数据框1

    col_id   col2    col3    col4....
r1     1
r2     1
r3     1
Run Code Online (Sandbox Code Playgroud)

数据框2

    col_id   col2    col3    col4....
r1     2
r2     2
r3     2
Run Code Online (Sandbox Code Playgroud)

数据框3

    col_id   col2    col3    col4....
r1     3
r2     3
r3     3
Run Code Online (Sandbox Code Playgroud)

是否可以将它们合并为一个大数据框?因此,我可以创建一个名为“索引”的新列,其中包含ID == 1,ID == 2等的行: …

python dataframe pandas

4
推荐指数
1
解决办法
351
查看次数

DataFrame中Series的平均值

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

values
[0.0,12.34,223.12,4.55,...]
[0.0,78.12,12.90,...]
.
.
. 
Run Code Online (Sandbox Code Playgroud)

我正在尝试计算值列的平均值并将该数字存储在新列中.

此时数据框只保留一列,并且值列中每个数组的长度不严格.

预期产量:

value                             average
[0.0,12.34,223.12,4.55,...]        77.87
[0.0,78.12,12.90,...]              12.11            
.
.
. 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用iterrows()遍历数据帧时,Np.mean()将无法工作.

基本上我需要扩展下面的代码来计算数据帧中的所有平均值:

np.mean(df_average_pace.paces[0])
Run Code Online (Sandbox Code Playgroud)

python arrays series pandas

2
推荐指数
1
解决办法
329
查看次数

列表中每个连续段的平均值

我有一个清单:

sample_list = array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
Run Code Online (Sandbox Code Playgroud)

我想计算每个元素的平均值,比如4元素.但不是4个元素,而是前4个:

1,2,3,4
Run Code Online (Sandbox Code Playgroud)

其次是:

2,3,4,5
Run Code Online (Sandbox Code Playgroud)

其次是:

3,4,5,6
Run Code Online (Sandbox Code Playgroud)

等等.

结果将是第一个列表中每4个元素之间的平均数组或列表.

输出:

array([2.5, 3.5, 4.5, ...])
Run Code Online (Sandbox Code Playgroud)

我的尝试:

sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
splits = 4

def avgerage_splits(data):
    datasum = 0
    count = 0 
    for num in data:
        datasum += num
    count += 1
    if count == splits: 
        yield datasum / splits
        datasum = count = 0
if count: 
    yield datasum / count

print(list(average_splits(sample_list)))

[1.5, 3.5, 5.5, 7.5, 9.5, 11.0]
Run Code Online (Sandbox Code Playgroud)

这不是我需要的输出,因为它在移动到一组新的4个元素之前计算每4个元素的平均值.我想只在列表中移动一个元素并计算那些元素的平均值,依此类推.

python numpy average list

2
推荐指数
1
解决办法
88
查看次数

如何合并熊猫数据框中的两列,堆叠在顶部

我有一个这样的数据框:

df1
  sample x data       data y
         b              a
         d              c
         f              e
         h              g
         j              i
         l              k
Run Code Online (Sandbox Code Playgroud)

我需要像这样创建一个新的数据框:

information  identifier
b       x
d       x
f       x
h       x
j       x
l       x
a       y
c       y
e       y 
g       y
i       y
k       y
Run Code Online (Sandbox Code Playgroud)

这可以在熊猫中完成吗?这就像将一列堆叠在另一列之上,但要记录该列是什么类型的信息。非常感谢。

python dataframe pandas

1
推荐指数
1
解决办法
125
查看次数

Groupby 并连接多列

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

ID  CODE  GROUP  PIN
 1   99     A     221
 1   89     B     443
 2   79     A     230
 2   69     A     000
 3   59     D     781
 3   49     T     665
Run Code Online (Sandbox Code Playgroud)

我想按 ID 列分组并连接所有其他字段,以逗号分隔,因此我得到如下输出:

 ID  CODE     GROUP      PIN
 1   99,89     A,B     221,443
 2   79,69     A,A     230,000
 3   59,49     D,T     781,665
Run Code Online (Sandbox Code Playgroud)

我可以按 ID 分组并返回连接的 CODE 字段,但我需要为多个字段执行此操作:

df = DATA.groupby('ID')['CODE'].apply(',' .join).reset_index(drop = False)
Run Code Online (Sandbox Code Playgroud)

这仅返回分组的 ID 字段和串联的 CODE 字段。如何将 groupby 扩展到多列?

非常感谢

dataframe pandas pandas-groupby

0
推荐指数
1
解决办法
485
查看次数

标签 统计

python ×7

pandas ×6

dataframe ×5

numpy ×3

arrays ×2

list ×2

average ×1

pandas-groupby ×1

scipy ×1

series ×1