问题描述
for i in data.columns:
top_10 = [x for x in data.i.value_counts().sort_values(ascending=False).head(10).index]
for label in top_10:
data[label] = np.where(data['i'] == label,1,0)
data[['i'] + top_10]
怎么了?
解决方法
如果要使用i
中具有的变量for i in data.columns:
,则不应使用data.i
,而应使用data[i]
(无' '
)>
for i in data.columns:
top_10 = data[i].value_counts().sort_values(ascending=False).head(10).index
如果您使用更好的名称(例如),可能会更具可读性。 column_name
for column_name in data.columns:
top_10 = data[column_name].value_counts().sort_values(ascending=False).head(10).index
data.i
与data["i"]
类似,它的意思是名称为i
而不是变量i
的列。
我不知道您如何尝试使用嵌套for
循环,但是您也应该使用data[i]
而不是data["i"]
for label in top_10:
data[label] = np.where(data[i]==label,1,0)
但是您可能应该使用更好的方法来创建标签
for number,value in enumerate(top_10):
data[i + '_' + str(number)] = np.where(data[i].index==value,0)
使用不同的名称可能更具可读性
for column_name in data.columns:
top_10 = data[column_name].value_counts().sort_values(ascending=False).head(10).index
for number,value in enumerate(top_10):
data[column_name + '_' + str(number)] = np.where(data[column_name].index==value,0)
但是没有一些示例数据,很难说出它是否正确。
编辑:
最小的工作示例。
我使用random.seed(0)
总是获得相同的值。
我使用top_3
在屏幕上查看所有值。
import pandas as pd
import random
import numpy as np
random.seed(0) # to get the same values every time
data = pd.DataFrame({
"A": [random.randint(0,10) for _ in range(10)],"B": [random.randint(0,})
#print(data)
for column_name in data.columns:
#print(data[column_name].value_counts())
top_3 = data[column_name].value_counts().sort_values(ascending=False).head(3).index
#print(top_3)
for number,value in enumerate(top_3,1):
name = column_name + '_' + str(number)
data[name] = np.where(data[column_name]==value,0)
print(data)
结果:
A B A_1 A_2 A_3 B_1 B_2 B_3
0 6 9 1 0 0 0 0 0
1 6 3 1 0 0 0 0 0
2 0 8 0 0 0 0 0 1
3 4 2 0 1 0 1 0 0
4 8 4 0 0 0 0 1 0
5 7 2 0 0 1 1 0 0
6 6 1 1 0 0 0 0 0
7 4 9 0 1 0 0 0 0
8 7 4 0 0 1 0 1 0
9 5 8 0 0 0 0 0 1