根据 pandas 数据帧的列值复制另一个数据帧中的行

Replicate rows in a pandas dataframe based on the column values of another dataframe

提问人:Paul Corcoran 提问时间:10/12/2022 更新时间:10/12/2022 访问量:94

问:

import pandas as pd
data = [10]
booklines = pd.DataFrame(data,columns=['Nums'])
matches = {'Fullname':['Sasel - Dassendorf'],'HomeTeam':['Sasel'],'AwayTeam':['Dassendorf']}
matches_df = pd.DataFrame(matches)

有没有办法根据书行中存在的行值 10 复制 matches_df 中的行数。

最终结果是匹配 df 像这样复制了十次。我正在寻找一种编程方式来执行此操作,而不是像这样手动添加十个。

matches_df.append([matches_df]*10,ignore_index=真)

enter image description here

蟒蛇 熊猫

评论

0赞 jezrael 10/12/2022
一个或第二个 DataFrame 中有多行?
0赞 Paul Corcoran 10/12/2022
所以我想将书行中的值乘以 matches[[Fullname,HomeTeam,AwayTeam]] 列
0赞 jezrael 10/12/2022
我问是因为不确定是否需要复制多行,就像编辑后的答案一样,最后一部分。

答:

1赞 jezrael 10/12/2022 #1

用:

val = booklines['Nums'].iat[0]

matches = {'Fullname':['Sasel - Dassendorf']*val,
           'HomeTeam':['Sasel']*val,
           'AwayTeam':['Dassendorf']*val}
matches_df = pd.DataFrame(matches)

艺术

matches = {'Fullname':['Sasel - Dassendorf'],'HomeTeam':['Sasel'],'AwayTeam':['Dassendorf']}
matches_df = pd.DataFrame(matches).reindex(range(val), method='ffill')
print (matches_df)
             Fullname HomeTeam    AwayTeam
0  Sasel - Dassendorf    Sasel  Dassendorf
1  Sasel - Dassendorf    Sasel  Dassendorf
2  Sasel - Dassendorf    Sasel  Dassendorf
3  Sasel - Dassendorf    Sasel  Dassendorf
4  Sasel - Dassendorf    Sasel  Dassendorf
5  Sasel - Dassendorf    Sasel  Dassendorf
6  Sasel - Dassendorf    Sasel  Dassendorf
7  Sasel - Dassendorf    Sasel  Dassendorf
8  Sasel - Dassendorf    Sasel  Dassendorf
9  Sasel - Dassendorf    Sasel  Dassendorf

如果两个 DataFrame 中的行数相同,并且需要使用列进行复制,请将 Index.repeatDataFrame.loc 一起使用:Nums

data = [10, 7]
booklines = pd.DataFrame(data,columns=['Nums'])
print (booklines)
   Nums
0    10
1     7

matches = {'Fullname':['Sasel - Dassendorf', 'Sasel - Dassendorf'],
           'HomeTeam':['Sasel', 'Dassendorf'],
           'AwayTeam':['Dassendorf', 'Sasel']}
matches_df = pd.DataFrame(matches)
print (matches_df)
             Fullname    HomeTeam    AwayTeam
0  Sasel - Dassendorf       Sasel  Dassendorf
1  Sasel - Dassendorf  Dassendorf       Sasel

df = matches_df.loc[matches_df.index.repeat(booklines['Nums'])]
print (df)
             Fullname    HomeTeam    AwayTeam
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
0  Sasel - Dassendorf       Sasel  Dassendorf
1  Sasel - Dassendorf  Dassendorf       Sasel
1  Sasel - Dassendorf  Dassendorf       Sasel
1  Sasel - Dassendorf  Dassendorf       Sasel
1  Sasel - Dassendorf  Dassendorf       Sasel
1  Sasel - Dassendorf  Dassendorf       Sasel
1  Sasel - Dassendorf  Dassendorf       Sasel
1  Sasel - Dassendorf  Dassendorf       Sasel

最后用于默认索引:

df = df.reset_index(drop=True)

评论

0赞 Paul Corcoran 10/12/2022
谢谢 有没有办法查找包含值 10 的 Booklines DataFrame 来执行此操作?
0赞 jezrael 10/12/2022
@PaulCorcoran - 你需要提取它吗?booklines['Nums'].iat[0]
1赞 Paul Corcoran 10/12/2022
谢谢 df = matches_df.loc[matches_df.index.repeat(booklines['Nums'])] 这是我想要的行
1赞 jezrael 10/12/2022
@PaulCorcoran - 超级棒!