小编Mik*_*ike的帖子

Pandas:根据列表中的重复值删除行

我想根据字符串中是否有一个字符串重复来删除数据帧中的行.例如,如果字符串是jkl-ghi-jkl,我会删除此行,因为jkl重复两次.我认为创建一个列表并检查列表中的重复项是理想的方法.

此示例的我的数据帧包含1列和两个数据点:

    df1 = pd.DataFrame({'Col1' : ['abc-def-ghi-jkl', 'jkl-ghi-jkl-mno'],})
Run Code Online (Sandbox Code Playgroud)

我采取的第一步是对我的数据应用拆分,并拆分" - "

    List = df1['Col1].str.split('-')
    List
Run Code Online (Sandbox Code Playgroud)

哪个产生输出:

    0     [abc, def, ghi, jkl]
    1     [jkl, ghi, jkl, mno]
    Name: Col1, dtype: object
Run Code Online (Sandbox Code Playgroud)

我采取的第二步是将输出转换为列表:

    List = List.tolist()
Run Code Online (Sandbox Code Playgroud)

产量:

    [['abc', 'def', 'ghi', 'jkl'], ['jkl', 'ghi', 'jkl', 'mno']]
Run Code Online (Sandbox Code Playgroud)

我希望完成的最后一步是将完整列表与不同的唯一值列表进行比较:

    len(List) > len(set(List))
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

    TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

我知道我的.tolist()创建了一个2系列的列表.有没有办法将这些系列转换为列表以测试重复?我希望使用这段代码:

    len(List) > len(set(List)
Run Code Online (Sandbox Code Playgroud)

使用drop来删除每个单元格中具有重复值的所有行.

这是正确的接近方式,还是有更简单的方法?

我的结束输出应该如下所示:

     Col1
     abc-def-ghi-jkl
Run Code Online (Sandbox Code Playgroud)

因为字符串jkl-ghi-jkl-mno因"jkl"重复两次而被删除

python pandas

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

Pandas/Python 根据条件添加行

我希望根据某些条件在两个现有行之间的数据框中插入一行。

例如,我的数据框:

    import pandas as pd
    df = pd.DataFrame({'Col1':['A','B','D','E'],'Col2':['B', 'C', 'E', 'F'], 'Col3':['1', '1', '1', '1']})
Run Code Online (Sandbox Code Playgroud)

看起来像:

    Col1    Col2    Col3
  0 A       B       1
  1 B       C       1
  2 D       E       1
  3 E       F       1
Run Code Online (Sandbox Code Playgroud)

我希望能够在给定条件的索引 1 和索引 2 之间插入新行:

n = 0   
while n < len(df):
    (df.ix[n]['Col2'] == df.ix[n+1]['Col1']) == False
    Something, Something, insert row
    n+=1
Run Code Online (Sandbox Code Playgroud)

我想要的输出表如下所示:

    Col1    Col2    Col3
  0 A       B       1
  1 B       C       1
  2 C       D       1
  3 D       E       1
  4 E …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

数据框列上的pd.Timedelta转换

我正在尝试将dataframe列转换为timedelta,但是出现问题。列的格式类似于“ + XX:XX:XX”或“ -XX:XX:XX”

我的数据框:

    df = pd.DataFrame({'time':['+06:00:00', '-04:00:00'],})
Run Code Online (Sandbox Code Playgroud)

我的方法:

    df['time'] = pd.Timedelta(df['time'])
Run Code Online (Sandbox Code Playgroud)

但是,我得到了错误:

    ValueError: Value must be Timedelta, string, integer, float, timedelta or convertible
Run Code Online (Sandbox Code Playgroud)

当我做一个简单的例子时:

    time = pd.Timedelta('+06:00:00')
Run Code Online (Sandbox Code Playgroud)

我得到想要的输出:

    Timedelta('0 days 06:00:00')
Run Code Online (Sandbox Code Playgroud)

如果我想将序列转换为具有所需输出的timedelta,将采用什么方法?

python pandas

4
推荐指数
2
解决办法
2393
查看次数

根据其他列的值创建新列

我想创建一个“高价值指标”列,它根据两个不同的值列显示“Y”或“N”。当 Value_1 > 1,000 或 Value_2 > 15,000 时,我希望新列有一个“Y”。下面是表格,所需的输出将包括基于或条件的指标列。

ID   Value_1     Value_2 
1    100         2500
2    250         6250
3    625         15625
4    1500        37500
5    3750        93750
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

pandas ×4

python ×4