'set' 无法在 pandas 的列表列中获取唯一值
'set' does not work to get unique values in a column of lists in pandas
我不确定为什么 'set' 在以下示例中没有获得唯一值:
df6 = pd.DataFrame({
'Name': ['Sara', 'John'],
'one': ['UK', 'UK'],
'two': ['IN', 'SA'],
'three': ['IN', 'IN'],
'four': ['IN', 'US']
})
df6
给出:
Name one two three four
0 Sara UK IN IN IN
1 John UK SA IN US
我连接了列表中的(一到四)列:
df6['Concat'] = df6[['one','two','three','four']].apply(lambda x: [', '.join(x[x.notnull()])], axis = 1)
给出:
Name one two three four Concat
0 Sara UK IN IN IN [UK, IN, IN, IN]
1 John UK SA IN US [UK, SA, IN, US]
现在我只想在每个名称的 Concat
列中获取唯一值:
我尝试了以下方法:
df6.Concat.apply(set)
但是结果和原来的列表一样!
0 {UK, IN, IN, IN}
1 {UK, SA, IN, US}
Name: Concat, dtype: object
为什么 'set' 在这种情况下不起作用?
我不想让unique list排序,只是为了加强学习,请问如何获取排序的unique values?
您的 Concat
列由 字符串列表 组成。它不是一个列表。当您将 set()
应用于该列表时,您会得到一组一个字符串。您应该将 set()
应用于原始数据列:
df6[['one','two','three','four']].apply(set, axis=1)
#0 {IN, UK}
#1 {SA, IN, UK, US}
参数axis=1
指示apply()
应用set()
row-wise。
我不确定为什么 'set' 在以下示例中没有获得唯一值:
df6 = pd.DataFrame({
'Name': ['Sara', 'John'],
'one': ['UK', 'UK'],
'two': ['IN', 'SA'],
'three': ['IN', 'IN'],
'four': ['IN', 'US']
})
df6
给出:
Name one two three four
0 Sara UK IN IN IN
1 John UK SA IN US
我连接了列表中的(一到四)列:
df6['Concat'] = df6[['one','two','three','four']].apply(lambda x: [', '.join(x[x.notnull()])], axis = 1)
给出:
Name one two three four Concat
0 Sara UK IN IN IN [UK, IN, IN, IN]
1 John UK SA IN US [UK, SA, IN, US]
现在我只想在每个名称的 Concat
列中获取唯一值:
我尝试了以下方法:
df6.Concat.apply(set)
但是结果和原来的列表一样!
0 {UK, IN, IN, IN}
1 {UK, SA, IN, US}
Name: Concat, dtype: object
为什么 'set' 在这种情况下不起作用?
我不想让unique list排序,只是为了加强学习,请问如何获取排序的unique values?
您的 Concat
列由 字符串列表 组成。它不是一个列表。当您将 set()
应用于该列表时,您会得到一组一个字符串。您应该将 set()
应用于原始数据列:
df6[['one','two','three','four']].apply(set, axis=1)
#0 {IN, UK}
#1 {SA, IN, UK, US}
参数axis=1
指示apply()
应用set()
row-wise。