目标是从pandas列(系列)创建字典,其中键是列的唯一元素,而值是元素所在的行索引。我目前有实现此目的的代码,但我想知道是否有更简单,更轻松的方法来实现此目的:
df = pd.DataFrame(np.random.randint(0,100,size=(1000, 4)), columns=list('ABCD'))
idx = df['A'].reset_index().groupby('A')['index'].apply(tuple).to_dict()
答案 0 :(得分:4)
这是GroupBy对象的groups
属性。它返回一个具有唯一值的字典作为原始DataFrame的键和Index
对象。
df.groupby('A').groups
{0: Int64Index([61, 466, 505, 619, 697, 811, 872], dtype='int64'),
1: Int64Index([125, 254, 278, 330, 390, 396, 670, 732, 748, 849, 871, 880, 882,
908, 943], dtype='int64'),
2: Int64Index([77, 283, 401, 543, 544, 693, 816], dtype='int64'),
...}
或者如果您真的需要元组:
{k: tuple(v) for k,v in df.groupby('A').groups.items()}
答案 1 :(得分:1)
您可以
#standardSQL
SELECT item, var1, CONCAT(var1, item) var2 FROM (
SELECT item, CONCAT('v2', IFNULL(var, '')) var1 FROM (
SELECT item,
STRING_AGG(item, '') OVER(ORDER BY item ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) var
FROM `project.dataset.table`
)
)