我想根据字符串中是否有一个字符串重复来删除数据帧中的行.例如,如果字符串是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"重复两次而被删除
我希望根据某些条件在两个现有行之间的数据框中插入一行。
例如,我的数据框:
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) 我正在尝试将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,将采用什么方法?
我想创建一个“高价值指标”列,它根据两个不同的值列显示“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)