我有一个像这样的数据框:
rng = np.random.RandomState(0)
tf = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': [1,2,3,2,2,3],
'data2': rng.randint(0, 10, 6)},
columns = ['key', 'data1', 'data2'])
tf
key data1 data2
0 A 1 5
1 B 2 0
2 C 3 3
3 A 2 3
4 B 2 7
5 C 3 9
如果我有一个数组x = np.arange(4)
,其长度与列[' key',' data1']中的组数相同。
grouped = tf.groupby(['key', 'data1'])
print(grouped.get_group(('A', 1)), '\n')
print(grouped.get_group(('A', 2)), '\n')
print(grouped.get_group(('B', 2)), '\n')
print(grouped.get_group(('C', 3)), '\n')
key data1 data2
0 A 1 5
key data1 data2
3 A 2 3
key data1 data2
1 B 2 0
4 B 2 7
key data1 data2
2 C 3 3
5 C 3 9
现在,有4组,我有一个矢量' x'长度为4.我想将x [i]分配给第i组的所有数据行2,我想对数据帧的所有行执行此操作。我正在尝试使用apply(),但是不能太过分。我终于找到了一种使用循环和掩码的方法,但是在处理大型数据帧时这非常慢。任何人都可以指出这样做的正确方法吗?
答案 0 :(得分:0)
好的,管理的解决方案比使用蒙版更快。这对我来说现在很有用。
unique_groups=tf.loc[:,"key":"data1"].drop_duplicates(
subset['key','data1']).values
grouped = tf.groupby(['key', 'data1'])
for i in range(len(unique_groups)):
tf.loc[grouped.get_group(tuple(unique_groups[i])).index, 'data2'] = x[i]
但是这仍然有循环,并且仍然比任何本机熊猫功能花费更多的时间。是否有本地熊猫的方法来做到这一点?