Python 熊猫用非数值减去两个数据帧
我有两个数据帧,如: df:Python 熊猫用非数值减去两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,如: df: a b c d 0 12 "vik" [9, 18] "SS" 1 13 "Rah" [10, 18] "YY" a b c d 0 12 "vik" [9, 18] "SS" 1 13 "Rah" [10, 18] "YY" 2 14 "Dil" [11, 18] "ZZ" import pand
a b c d
0 12 "vik" [9, 18] "SS"
1 13 "Rah" [10, 18] "YY"
a b c d
0 12 "vik" [9, 18] "SS"
1 13 "Rah" [10, 18] "YY"
2 14 "Dil" [11, 18] "ZZ"
import pandas as pd
df = pd.DataFrame({"a": [12, 13], "b":["vik", "Rah"], "c":[[9, 18], [10, 18]], "d":["SS", "YY"]})
df2 = pd.DataFrame({"a": [12, 13, 14], "b":["vik", "Rah", "Dil"], "c":[[9, 18], [10, 18], [11, 18]], "d":["SS", "YY", "ZZ"]})
df3 = pd.concat([df, df2], ignore_index=True)
df3["c"] = df3["c"].apply(tuple)
print(df3.drop_duplicates(keep=False))
df2:
a b c d
0 12 "vik" [9, 18] "SS"
1 13 "Rah" [10, 18] "YY"
a b c d
0 12 "vik" [9, 18] "SS"
1 13 "Rah" [10, 18] "YY"
2 14 "Dil" [11, 18] "ZZ"
import pandas as pd
df = pd.DataFrame({"a": [12, 13], "b":["vik", "Rah"], "c":[[9, 18], [10, 18]], "d":["SS", "YY"]})
df2 = pd.DataFrame({"a": [12, 13, 14], "b":["vik", "Rah", "Dil"], "c":[[9, 18], [10, 18], [11, 18]], "d":["SS", "YY", "ZZ"]})
df3 = pd.concat([df, df2], ignore_index=True)
df3["c"] = df3["c"].apply(tuple)
print(df3.drop_duplicates(keep=False))
我想从df2中删除df中的行。我试过了
df2.sub(df, fill_values=0)
这给了我一个错误TypeError:-:'str'和'str'不支持的操作数类型
我期望的输出如下所示:
a b c d
0 14 "Dil" [11, 18] "ZZ"
任何帮助都是可观的。与left join和参数一起使用indicator=True
,然后过滤并删除列\u merge
:
df1['c'] = df1['c'].apply(tuple)
df2['c'] = df2['c'].apply(tuple)
df3 = (df2.merge(df, how='left', indicator=True)
.query('_merge == "left_only"')
.drop('_merge', axis=1))
df3['c'] = df3['c'].apply(list)
print (df3)
a b c d
2 14 Dil [11, 18] ZZ
这是一种使用concat
和drop\u duplicates
Ex:
a b c d
0 12 "vik" [9, 18] "SS"
1 13 "Rah" [10, 18] "YY"
a b c d
0 12 "vik" [9, 18] "SS"
1 13 "Rah" [10, 18] "YY"
2 14 "Dil" [11, 18] "ZZ"
import pandas as pd
df = pd.DataFrame({"a": [12, 13], "b":["vik", "Rah"], "c":[[9, 18], [10, 18]], "d":["SS", "YY"]})
df2 = pd.DataFrame({"a": [12, 13, 14], "b":["vik", "Rah", "Dil"], "c":[[9, 18], [10, 18], [11, 18]], "d":["SS", "YY", "ZZ"]})
df3 = pd.concat([df, df2], ignore_index=True)
df3["c"] = df3["c"].apply(tuple)
print(df3.drop_duplicates(keep=False))
@bro grammer-不幸的是,如果更改df2的索引值失败,则不会。啊,是的!你是对的。很好的捕获。它显示错误TypeError:unhabable类型:“list”
@VikasDamodar-处理pandas中的列表确实有问题,需要将列转换为元组。检查编辑的答案。