在 pandas 数据框列中添加多个常量值
Adding multiple constant values in a pandas dataframe column
我想知道如何将多个不同长度的常量值添加到数据框列中。我知道我们可以像这样向数据框列 'A' 添加一个常量值(例如:5):
df['A'] = 5
但我希望数据框类似于下面的 table。如您所见,我需要三个 5、两个 10、六个 30 和一个 100。你怎么能对大约 10000 行具有一定数量的值(不是随机的)执行此操作,每个值都有用户定义的频率。
index
A
1
5
2
5
3
5
4
10
5
10
6
30
7
30
8
30
9
30
10
30
11
30
12
100
您可以在字典中指定值和重复并使用:
d = {3:5, 2:10, 6:30, 1:100}
df = pd.DataFrame({'A': [x for k, v in d.items() for x in [v] * k]})
print (df)
A
0 5
1 5
2 5
3 10
4 10
5 30
6 30
7 30
8 30
9 30
10 30
11 100
使用字典和 numpy.repeat
的解决方案:
df = pd.DataFrame({'A': np.repeat(list(d.values()), list(d.keys()))})
print (df)
A
0 5
1 5
2 5
3 10
4 10
5 30
6 30
7 30
8 30
9 30
10 30
11 100
IIUC 你可以使用:
df['b'] = np.repeat([5, 5, 5, 10, 10, 30, 30, 30, 30, 30, 30, 100], np.ceil(len(df) / 12))[:len(df)]
或者:
df['b'] = np.repeat([*[5] * 3, *[10] * 2, *[30] * 6, 100], np.ceil(len(df) / 12))[:len(df)]
您可以将 numpy.repeat
与 DataFrame 构造函数一起使用:
vals = [5,10,30,100]
reps = [3,2,6,1]
df = pd.DataFrame({'A': np.repeat(vals, reps)})
df.index+=1
输出:
A
1 5
2 5
3 5
4 10
5 10
6 30
7 30
8 30
9 30
10 30
11 30
12 100
试试这个:
import itertools
value = [5,10,30,100]
repeat = [3,2,6,1]
lst = [([v]*r) for v,r in zip(value,repeat)]
merged = list(itertools.chain(*lst))
df = pd.DataFrame({'A':merged})
df
输出:
A
0 5
1 5
2 5
3 10
4 10
5 30
6 30
7 30
8 30
9 30
10 30
11 100
我想知道如何将多个不同长度的常量值添加到数据框列中。我知道我们可以像这样向数据框列 'A' 添加一个常量值(例如:5):
df['A'] = 5
但我希望数据框类似于下面的 table。如您所见,我需要三个 5、两个 10、六个 30 和一个 100。你怎么能对大约 10000 行具有一定数量的值(不是随机的)执行此操作,每个值都有用户定义的频率。
index | A |
---|---|
1 | 5 |
2 | 5 |
3 | 5 |
4 | 10 |
5 | 10 |
6 | 30 |
7 | 30 |
8 | 30 |
9 | 30 |
10 | 30 |
11 | 30 |
12 | 100 |
您可以在字典中指定值和重复并使用:
d = {3:5, 2:10, 6:30, 1:100}
df = pd.DataFrame({'A': [x for k, v in d.items() for x in [v] * k]})
print (df)
A
0 5
1 5
2 5
3 10
4 10
5 30
6 30
7 30
8 30
9 30
10 30
11 100
使用字典和 numpy.repeat
的解决方案:
df = pd.DataFrame({'A': np.repeat(list(d.values()), list(d.keys()))})
print (df)
A
0 5
1 5
2 5
3 10
4 10
5 30
6 30
7 30
8 30
9 30
10 30
11 100
IIUC 你可以使用:
df['b'] = np.repeat([5, 5, 5, 10, 10, 30, 30, 30, 30, 30, 30, 100], np.ceil(len(df) / 12))[:len(df)]
或者:
df['b'] = np.repeat([*[5] * 3, *[10] * 2, *[30] * 6, 100], np.ceil(len(df) / 12))[:len(df)]
您可以将 numpy.repeat
与 DataFrame 构造函数一起使用:
vals = [5,10,30,100]
reps = [3,2,6,1]
df = pd.DataFrame({'A': np.repeat(vals, reps)})
df.index+=1
输出:
A
1 5
2 5
3 5
4 10
5 10
6 30
7 30
8 30
9 30
10 30
11 30
12 100
试试这个:
import itertools
value = [5,10,30,100]
repeat = [3,2,6,1]
lst = [([v]*r) for v,r in zip(value,repeat)]
merged = list(itertools.chain(*lst))
df = pd.DataFrame({'A':merged})
df
输出:
A
0 5
1 5
2 5
3 10
4 10
5 30
6 30
7 30
8 30
9 30
10 30
11 100