我有四個串列包含不同的數字,如下所示:
list1 = [399826, 399827, 413350, 404450, 399827, 404451]
list2 = [399825, 399826, 412450, 403650, 391227]
list3 = [412450, 399827]
list4 = [399829, 399246, 513350, 404370, 789827, 439931, 404451]
關于串列,串列之間存在重疊。我將制作一個資料框,它顯示一組所有數字和它們所屬的串列的名稱。像這樣:
| 數字 | 清單 1 | 串列2 | 清單 3 | 清單 4 |
|---|---|---|---|---|
| 399826 | 真的 | 真的 | 錯誤的 | 錯誤的 |
| 399827 | 真的 | 錯誤的 | 真的 | 錯誤的 |
| 413350 | 真的 | 錯誤的 | 錯誤的 | 錯誤的 |
| 412450 | 錯誤的 | 真的 | 真的 | 錯誤的 |
| 等等 | ... | ... | ... | ... |
為了比較串列,我在這里使用了一個函式:
def returnNotMatches(a, b):
a = set(a)
b = set(b)
return list(b - a)
但我不知道如何正確制作資料框。在此先感謝您的幫助。
uj5u.com熱心網友回復:
首先按列為新列名稱創建字典,然后在值中dicts使用Trues創建并創建DataFrame,最后將NaNs替換為Falses:
list1 = [399826, 399827, 413350, 404450, 399827, 404451]
list2 = [399825, 399826, 412450, 403650, 391227]
list3 = [412450, 399827]
list4 = [399829, 399246, 513350, 404370, 789827, 439931, 404451]
d = {'list1':list1,'list2':list2,'list3':list3,'list4':list4 }
df = pd.DataFrame({k: dict.fromkeys(v, True) for k, v in d.items()}).fillna(False)
print (df)
list1 list2 list3 list4
399826 True True False False
399827 True False True False
413350 True False False False
404450 True False False False
404451 True False False True
399825 False True False False
412450 False True True False
403650 False True False False
391227 False True False False
399829 False False False True
399246 False False False True
513350 False False False True
404370 False False False True
789827 False False False True
439931 False False False True
uj5u.com熱心網友回復:
資料:
>>> list1 = [399826, 399827, 413350, 404450, 399827, 404451]
>>> list2 = [399825, 399826, 412450, 403650, 391227]
>>> list3 = [412450, 399827]
>>> list4 = [399829, 399246, 513350, 404370, 789827, 439931, 404451]
>>> import pandas as pd
>>> df = pd.DataFrame(list1 list2 list3 list4, columns=['values'])
>>> for i in range(1,5):
>>> v = 'list' str(i)
>>> df[v] = df['values'].apply(lambda x:x in eval(v))
>>> df
values list1 list2 list3 list4
0 399826 True True False False
1 399827 True False True False
2 413350 True False False False
3 404450 True False False False
4 399827 True False True False
5 404451 True False False True
6 399825 False True False False
7 399826 True True False False
8 412450 False True True False
9 403650 False True False False
10 391227 False True False False
11 412450 False True True False
12 399827 True False True False
13 399829 False False False True
14 399246 False False False True
15 513350 False False False True
16 404370 False False False True
17 789827 False False False True
18 439931 False False False True
19 404451 True False False True
uj5u.com熱心網友回復:
創建 dicexplode和crosstab
d = {'list1':list1,'list2':list2,'list3':list3,'list4':list4 }
s = pd.Series(d).explode()
s = pd.crosstab(s,s.index).astype(bool)
Out[67]:
col_0 list1 list2 list3 list4
row_0
391227 False True False False
399246 False False False True
399825 False True False False
399826 True True False False
399827 True False True False
399829 False False False True
403650 False True False False
404370 False False False True
404450 True False False False
404451 True False False True
412450 False True True False
413350 True False False False
439931 False False False True
513350 False False False True
789827 False False False True
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/339431.html
上一篇:Python-根據索引號從串列中選擇字串-通過輸入輸入的索引號
下一篇:比較地圖和串列中的專案
