我有两个数据框df1df2df1包含共享相同人口的两个地方之间的信息。

df1
     PlaceA  Population PlaceB
0     3         10         2
1     4         10         2
2     7         17         0
3     9         13         1


df2包含到达PlaceB的行进距离

df2
     PlaceB  distance
0      0       130
1      1       145
2      2       165


我想有一个在df1上合并df2PlaceB的数据框,并将返回的人口除以共享相同人口的地点数。例如,地方2、3、4共享相同的人口,我们除以3。

df3
      Place     Population   Distance
0       0          17/2        130
1       1          13/2        145
2       2          10/3        165
3       3          10/3        165
4       4          10/3        165
5       7          17/2        130
6       9          12/2        145

最佳答案

你可以试试:


合并PlaceBouter上的两个数据框,以确保考虑所有PlaceB值。 merge函数完成任务。
使用placeBgroupby分组。
对于每个组:

3.1。使用PlaceAPlaceBPlace列转换为一列(称为melt)。

3.2。用drop_duplicates删除重复项

3.3。将Population列转换为所需的输出。在这里,我将其转换为字符串以匹配所需的输出。


可选(以匹配所需的输出):


Placesort_values对值进行排序。
drop删除变量列
使用reset_index重置并删除当前索引。


这里的代码:

# Import module
import pandas as pd

# The input data
df1 = pd.DataFrame({"PlaceA": [3, 4, 7, 9],
                    "Population": [10, 10, 17, 13],
                    "PlaceB": [2, 2, 0, 1]})
df2 = pd.DataFrame({"PlaceB": [0, 1, 2], "distance": [130, 145, 165]})

# Function to apply to each `PlaceB` group
def melt_and_pop_up(x):
    x = x.melt(id_vars=['Population', 'distance'], value_name='Place') \
         .drop_duplicates()
    x.Population = "{}/{}".format(x.Population.values[0], len(x))
    # Get decimal values
    # x.Population = x.Population.values[0] / len(x)
    return x


df = df1.merge(df2, on="PlaceB", how='outer')  \
        .groupby('PlaceB') \
        .apply(melt_and_pop_up) \
        .sort_values('Place') \
        .drop(columns=['variable'])  \
        .reset_index(drop=True) \
        [["Place", "Population", "distance"]]
print(df)
#    Place Population  distance
# 0      0       17/2       130
# 1      1       13/2       145
# 2      2       10/3       165
# 3      3       10/3       165
# 4      4       10/3       165
# 5      7       17/2       130
# 6      9       13/2       145

关于python - Python:如何在两个数据框之间合并和划分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57707067/

10-12 23:24