मैं जानता हूँ कि यह एक पुराने सवाल यह है की तरह मिलता है, लेकिन मैं हो रही थी डेटाफ्रेम में एकाधिक कॉलम के लिए काम करने के लिए वेस का जवाब प्राप्त करने में परेशानी है इसलिए मैंने अपना कोड थोड़ा और सामान्य बना दिया। सोचा कि अगर मैं किसी और समस्या को एक ही समस्या के साथ इस सवाल पर ठोकर खाऊंगा तो मैं साझा करूंगा।
आप मूल रूप से निर्दिष्ट करते हैं कि इसमें किस कॉलम की गणना है और आपको बदले में विस्तारित डेटाफ्रेम मिलता है।
import pandas as pd
df = pd.DataFrame({'class 1': ['A','B','C','A'],
'class 2': [ 1, 2, 3, 1],
'count': [ 3, 3, 3, 1]})
print df,"\n"
def f(group, *args):
row = group.irow(0)
Dict = {}
row_dict = row.to_dict()
for item in row_dict: Dict[item] = [row[item]] * row[args[0]]
return pd.DataFrame(Dict)
def ExpandRows(df,WeightsColumnName):
df_expand = df.groupby(df.columns.tolist(), group_keys=False).apply(f,WeightsColumnName).reset_index(drop=True)
return df_expand
df_expanded = ExpandRows(df,'count')
print df_expanded
रिटर्न:
class 1 class 2 count
0 A 1 3
1 B 2 3
2 C 3 3
3 A 1 1
class 1 class 2 count
0 A 1 1
1 A 1 3
2 A 1 3
3 A 1 3
4 B 2 3
5 B 2 3
6 B 2 3
7 C 3 3
8 C 3 3
9 C 3 3
के साथ गति के संबंध
, मेरी आधार df से 10 कॉलम 6k पंक्तियों है ~ और जब विस्तार 100,000 पंक्तियों ~ 7 सेकंड लेता है ~ है। मुझे इस मामले में निश्चित नहीं है कि समूहांकन आवश्यक है या बुद्धिमान है क्योंकि यह सभी कॉलम समूह रूप में ले रहा है, लेकिन हे जो कुछ भी 7 सेकंड है।
स्रोत
2015-05-04 21:25:03
मुझे एक सामान्य कार्य भी है जो 'गिनती' कॉलम में मानों के आधार पर एकाधिक, एक या शून्य पंक्तियों को वापस करने की अनुमति देगा। – btel
यदि आप 2017+ में इस प्रश्न पर आ रहे हैं, तो मेरे उत्तर को अधिक कुशल और सीधा समाधान के लिए देखें। –