簡體   English   中英

為給定列中的每個唯一元素重復 DataFrame 的元素

[英]Repeat elements of a DataFrame for each unique element in a given column

我的問題很簡單,可能有一種非常簡單的方法可以解決,但是在嘗試找到解決方案時,我已經花費了太多的耐心。

我有以下數據,我只是為了說明而編造的:


x1 = ['a','b','c']
x2 = [1,2,3,4]
x3 = ['y1','y2','y3','y4']

我想要做的是對於第一列的每個唯一元素,我想為該特定唯一值重復該數據幀的其余部分。 因此,獲得以下內容:

   0  1   2
0  a  1  y1
1  a  2  y2
2  a  3  y3
3  a  4  y4
4  b  1  y1
5  b  2  y2
6  b  3  y3
7  b  4  y4
8  c  1  y1
9  c  2  y2
10 c  3  y3
11 c  4  y4

任何想法如何克服它?

使用帶有壓縮列的itertools.product

from itertools import product

df = pd.DataFrame([(a,b,c) for a, (b, c) in product(x1, zip(x2, x3))])
print (df)
    0  1   2
0   a  1  y1
1   a  2  y2
2   a  3  y3
3   a  4  y4
4   b  1  y1
5   b  2  y2
6   b  3  y3
7   b  4  y4
8   c  1  y1
9   c  2  y2
10  c  3  y3
11  c  4  y4

如果輸入是 DataFrames 使用cross join

df1 = pd.DataFrame({'a':x1})
df2 = pd.DataFrame({'b':x2, 'c':x3})

df = df1.assign(val=1).merge(df2.assign(val=1), on='val').drop('val', axis=1)
print (df)
    a  b   c
0   a  1  y1
1   a  2  y2
2   a  3  y3
3   a  4  y4
4   b  1  y1
5   b  2  y2
6   b  3  y3
7   b  4  y4
8   c  1  y1
9   c  2  y2
10  c  3  y3
11  c  4  y4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM